All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
       [not found] <20200427211638.6047-1-xroumegue@gmail.com>
@ 2020-04-27 21:44 ` Fabio Estevam
  2020-04-28 20:28   ` Xavier Roumegue
  2020-07-16 21:04 ` Fabio Estevam
  1 sibling, 1 reply; 10+ messages in thread
From: Fabio Estevam @ 2020-04-27 21:44 UTC (permalink / raw)
  To: buildroot

Hi Xavier,

On Mon, Apr 27, 2020 at 6:16 PM Xavier Roumegue <xroumegue@gmail.com> wrote:
>
> This script aims to create an imx compatible boot image embedding
> mainline components, using only upstream uboot mkimage tool, avoiding
> dependencies on proprietary imx mkimage.
>
> Mainline u-boot can generate a bootable image, but SPL soc proprietary
> firmware dependencies have to be copied on uboot root dir.
>
> This script prevents additional buildroot uboot recipe hacking to handle
> custom SoC uboot build process.
>
> The script actions summary is:
> - Append DDR4 firmware to uboot spl binary
> - Generate imx mkimage configuration file, extracting entry points from
>   relevant elf files on the fly.
> - Generate imx boot image using uboot upstream mkimage tool
>
> Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>

This is cool :-) I like it!

Do you think we can also expand this later to support booting i.MX8QXP
and i.MX8QM too?

Thanks


> ---
>  .../common/imx/imx8-generate-fw-image.sh      | 52 +++++++++++++++++++
>  1 file changed, 52 insertions(+)
>  create mode 100755 board/freescale/common/imx/imx8-generate-fw-image.sh
>
> diff --git a/board/freescale/common/imx/imx8-generate-fw-image.sh b/board/freescale/common/imx/imx8-generate-fw-image.sh
> new file mode 100755
> index 0000000000..eb9e96265b
> --- /dev/null
> +++ b/board/freescale/common/imx/imx8-generate-fw-image.sh
> @@ -0,0 +1,52 @@
> +#!/usr/bin/env bash
> +
> +get_entry()
> +{
> +    local elf_file=$1
> +    readelf -h "$elf_file" | sed -e '/Entry/!d;s/.*:.*\(0x[0-9a-fA-F]\)/\1/g'
> +}
> +
> +gen_cfg_file()
> +{
> +cat <<EOF > "$CFG_OUTFILE"
> +#define __ASSEMBLY__
> +
> +FIT
> +BOOT_FROM      sd
> +LOADER         ${SPL_DDR_BIN}  ${SPL_ENTRY}
> +SECOND_LOADER  ${UBOOT_BIN}            ${UBOOT_ENTRY} 0x60000
> +
> +EOF
> +}
> +
> +gen_1stloader_bin()
> +{
> +    SPL_BIN_PAD="$(mktemp --suffix spl_pad.bin)"
> +    dd if="${SPL_BIN}" of="${SPL_BIN_PAD}"  bs=4 conv=sync
> +    cat "${SPL_BIN_PAD}" "${DDR_FW_BIN}" > "${SPL_DDR_BIN}"
> +}
> +
> +gen_fw_image()
> +{
> +    "${HOST_DIR}"/bin/mkimage -n "${CFG_OUTFILE}" -T imx8mimage -e "${SPL_ENTRY}" -d "${UBOOT_BIN}" "${FLASH_BIN}"
> +
> +}
> +main()
> +{
> +    UBOOT_BIN="${BINARIES_DIR}/u-boot.itb"
> +    UBOOT_ELF="${BINARIES_DIR}/u-boot"
> +    SPL_DDR_BIN="${BINARIES_DIR}/u-boot-spl-ddr.bin"
> +    SPL_BIN="${BINARIES_DIR}/u-boot-spl.bin"
> +    SPL_ELF="${BINARIES_DIR}/u-boot-spl"
> +    CFG_OUTFILE="${BINARIES_DIR}/bootimage.cfg"
> +    FLASH_BIN="${BINARIES_DIR}/imx8-boot-sd.bin"
> +    UBOOT_ENTRY="$(get_entry "${UBOOT_ELF}")"
> +    SPL_ENTRY="$(get_entry "${SPL_ELF}")"
> +    DDR_FW_BIN="${BINARIES_DIR}/lpddr4_pmu_train_fw.bin"
> +
> +    gen_1stloader_bin
> +    gen_cfg_file
> +    gen_fw_image
> +}
> +
> +main "$@"
> --
> 2.25.1
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-04-27 21:44 ` [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary Fabio Estevam
@ 2020-04-28 20:28   ` Xavier Roumegue
  0 siblings, 0 replies; 10+ messages in thread
From: Xavier Roumegue @ 2020-04-28 20:28 UTC (permalink / raw)
  To: buildroot

On Mon, Apr 27, 2020 at 06:44:09PM -0300, Fabio Estevam wrote:
> Hi Xavier,
>
> On Mon, Apr 27, 2020 at 6:16 PM Xavier Roumegue <xroumegue@gmail.com> wrote:
> >
> > This script aims to create an imx compatible boot image embedding
> > mainline components, using only upstream uboot mkimage tool, avoiding
> > dependencies on proprietary imx mkimage.
> >
> > Mainline u-boot can generate a bootable image, but SPL soc proprietary
> > firmware dependencies have to be copied on uboot root dir.
> >
> > This script prevents additional buildroot uboot recipe hacking to handle
> > custom SoC uboot build process.
> >
> > The script actions summary is:
> > - Append DDR4 firmware to uboot spl binary
> > - Generate imx mkimage configuration file, extracting entry points from
> >   relevant elf files on the fly.
> > - Generate imx boot image using uboot upstream mkimage tool
> >
> > Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>
>
> This is cool :-) I like it!

Hi Fabio
Glad to read you like the idea !
>
> Do you think we can also expand this later to support booting i.MX8QXP
> and i.MX8QM too?
Yes, that's exactly the intention here, supporting all imx8 platforms, relying
on uboot mkimage only.

Xavier

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
       [not found] <20200427211638.6047-1-xroumegue@gmail.com>
  2020-04-27 21:44 ` [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary Fabio Estevam
@ 2020-07-16 21:04 ` Fabio Estevam
  1 sibling, 0 replies; 10+ messages in thread
From: Fabio Estevam @ 2020-07-16 21:04 UTC (permalink / raw)
  To: buildroot

Hi Xavier,

On Mon, Apr 27, 2020 at 6:16 PM Xavier Roumegue <xroumegue@gmail.com> wrote:
>
> This script aims to create an imx compatible boot image embedding
> mainline components, using only upstream uboot mkimage tool, avoiding
> dependencies on proprietary imx mkimage.
>
> Mainline u-boot can generate a bootable image, but SPL soc proprietary
> firmware dependencies have to be copied on uboot root dir.
>
> This script prevents additional buildroot uboot recipe hacking to handle
> custom SoC uboot build process.
>
> The script actions summary is:
> - Append DDR4 firmware to uboot spl binary
> - Generate imx mkimage configuration file, extracting entry points from
>   relevant elf files on the fly.
> - Generate imx boot image using uboot upstream mkimage tool
>
> Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>

Do you plan to resubmit this patch?

I am looking forward to being able to use a Buildroot generated image
with U-Boot and kernel mainline on i.MX8 boards :-)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-11-03 22:39     ` Thomas Petazzoni
@ 2020-11-10 20:44       ` Xavier Roumegue
  0 siblings, 0 replies; 10+ messages in thread
From: Xavier Roumegue @ 2020-11-10 20:44 UTC (permalink / raw)
  To: buildroot

On Tue, Nov 03, 2020 at 11:39:34PM +0100, Thomas Petazzoni wrote:
Hello Thomas,
> Hello Xavier,
>
> On Tue, 28 Apr 2020 23:50:46 +0200
> Xavier Roumegue <xroumegue@gmail.com> wrote:
>
> > Hello Thomas,
> > iMX8 Upstream uboot adds a custom target 'flash.bin', a bootable medium once
> > written to 33k offset.
> >
> > 1) On iMX8m[mqn], the (lp)ddr4 firmware, and hdmi fw for iMX8mq, have to be copied
> > in the uboot build dir prior to execute the build.
> > Additional SoC firmwares (system and security controllers) have to be copied
> > for iMX8X and iMX8QM.
> >
> > 2) (lp)ddr4 firmware is appended to uboot spl thanks to tools/imx8m_image.sh.
> > 3) A config file per imx platform (*.cfg) is describing the imx mkimage parameters,
> > ..i.e. loaders file paths and entry points, SoC firmwares, boot rom options,
> > etc..
> > 4) Final loader is uboot.itb, generated as dependency of flash.bin for iMX
> > platforms, and using an its file generated by arch/arm/mach-imx/mkimage_fit_atf.sh.
> > ATF, TEE images have as well to be copied to uboot build dir, and their entry
> > points can be specified through environment variables.
> >
> > 5) Generate 'flash.bin'
> >
> > The proposed script is taking care of 2), 3) and 5), with intention to support all
> > iMX8 platforms generating the mkimage config file on the fly and relying on
> > buildroot recipes to copy the required firmwares in images directory.
> >
> > Current proposal does not generate the uboot FIT image, but this would likely be
> > an enhancement I would like to bring once 3) is achieved for all iMX8.
>
> Thanks a lot for providing those additional details, and sorry for the
> long delay. After looking into this a bit, I really think we should
> leverage more what U-Boot upstream is doing, and not re-invent all this
> image creation logic.
>
> So in fact, I do like better what
> https://github.com/SolidRun/buildroot/commit/0f2b2971e836b508bf9c2dac34426a59a9d83572
> is doing. The only gotcha is that it uses BINDIR to point to
> BINARIES_DIR, but BINDIR doesn't exist in upstream U-Boot, it seems to
> be some SolidRun-specific change that we can't rely on.
>
> But since this patch is also adding a
> BR2_TARGET_UBOOT_NEEDS_IMX_FIRMWARE, we can definitely add some logic
> in uboot.mk to copy the i.MX firmware files within the U-Boot source
> directory prior to the build. Yes, it's more logic in uboot.mk, but I
> find that better than more logic in yet another custom shell script in
> board/.
>
> Do you think you could rework your patch in this direction ?

I reworked the patch series as per your suggestion.
I tried to be as much generic as possible on the uboot recipe patch.

Please, let me know your thoughts, in case this needs additional rework..
I would like to carry on with upstream configurations on imx8m[qnp] evk boards.

Thanks.
 Xavier

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-04-28 21:50   ` Xavier Roumegue
@ 2020-11-03 22:39     ` Thomas Petazzoni
  2020-11-10 20:44       ` Xavier Roumegue
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2020-11-03 22:39 UTC (permalink / raw)
  To: buildroot

Hello Xavier,

On Tue, 28 Apr 2020 23:50:46 +0200
Xavier Roumegue <xroumegue@gmail.com> wrote:

> Hello Thomas,
> iMX8 Upstream uboot adds a custom target 'flash.bin', a bootable medium once
> written to 33k offset.
> 
> 1) On iMX8m[mqn], the (lp)ddr4 firmware, and hdmi fw for iMX8mq, have to be copied
> in the uboot build dir prior to execute the build.
> Additional SoC firmwares (system and security controllers) have to be copied
> for iMX8X and iMX8QM.
> 
> 2) (lp)ddr4 firmware is appended to uboot spl thanks to tools/imx8m_image.sh.
> 3) A config file per imx platform (*.cfg) is describing the imx mkimage parameters,
> ..i.e. loaders file paths and entry points, SoC firmwares, boot rom options,
> etc..
> 4) Final loader is uboot.itb, generated as dependency of flash.bin for iMX
> platforms, and using an its file generated by arch/arm/mach-imx/mkimage_fit_atf.sh.
> ATF, TEE images have as well to be copied to uboot build dir, and their entry
> points can be specified through environment variables.
> 
> 5) Generate 'flash.bin'
> 
> The proposed script is taking care of 2), 3) and 5), with intention to support all
> iMX8 platforms generating the mkimage config file on the fly and relying on
> buildroot recipes to copy the required firmwares in images directory.
> 
> Current proposal does not generate the uboot FIT image, but this would likely be
> an enhancement I would like to bring once 3) is achieved for all iMX8.

Thanks a lot for providing those additional details, and sorry for the
long delay. After looking into this a bit, I really think we should
leverage more what U-Boot upstream is doing, and not re-invent all this
image creation logic.

So in fact, I do like better what
https://github.com/SolidRun/buildroot/commit/0f2b2971e836b508bf9c2dac34426a59a9d83572
is doing. The only gotcha is that it uses BINDIR to point to
BINARIES_DIR, but BINDIR doesn't exist in upstream U-Boot, it seems to
be some SolidRun-specific change that we can't rely on.

But since this patch is also adding a
BR2_TARGET_UBOOT_NEEDS_IMX_FIRMWARE, we can definitely add some logic
in uboot.mk to copy the i.MX firmware files within the U-Boot source
directory prior to the build. Yes, it's more logic in uboot.mk, but I
find that better than more logic in yet another custom shell script in
board/.

Do you think you could rework your patch in this direction ?

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-04-27 21:57 ` Thomas Petazzoni
  2020-04-28  8:53   ` Gary Bisson
@ 2020-04-28 21:50   ` Xavier Roumegue
  2020-11-03 22:39     ` Thomas Petazzoni
  1 sibling, 1 reply; 10+ messages in thread
From: Xavier Roumegue @ 2020-04-28 21:50 UTC (permalink / raw)
  To: buildroot

On Mon, Apr 27, 2020 at 11:57:04PM +0200, Thomas Petazzoni wrote:
> Hello Xavier,
>
> On Mon, 27 Apr 2020 23:34:00 +0200
> Xavier Roumegue <xroumegue@gmail.com> wrote:
>
> > This script aims to create an imx compatible boot image embedding
> > mainline components, using only upstream uboot mkimage tool, avoiding
> > dependencies on proprietary imx mkimage.
> >
> > Mainline u-boot can generate a bootable image, but SPL soc proprietary
> > firmware dependencies have to be copied on uboot root dir.
> >
> > This script prevents additional buildroot uboot recipe hacking to handle
> > custom SoC uboot build process.
> >
> > The script actions summary is:
> > - Append DDR4 firmware to uboot spl binary
> > - Generate imx mkimage configuration file, extracting entry points from
> >   relevant elf files on the fly.
> > - Generate imx boot image using uboot upstream mkimage tool
> >
> > Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>
>
> Thanks for this proposal. Could you share a bit more details about the
> upstream U-Boot i.MX8 image generation logic? How does it work, how do
> you trigger it, which FW binaries need to be copied to the U-Boot build
> directory, etc. ?

Hello Thomas,
iMX8 Upstream uboot adds a custom target 'flash.bin', a bootable medium once
written to 33k offset.

1) On iMX8m[mqn], the (lp)ddr4 firmware, and hdmi fw for iMX8mq, have to be copied
in the uboot build dir prior to execute the build.
Additional SoC firmwares (system and security controllers) have to be copied
for iMX8X and iMX8QM.

2) (lp)ddr4 firmware is appended to uboot spl thanks to tools/imx8m_image.sh.
3) A config file per imx platform (*.cfg) is describing the imx mkimage parameters,
..i.e. loaders file paths and entry points, SoC firmwares, boot rom options,
etc..
4) Final loader is uboot.itb, generated as dependency of flash.bin for iMX
platforms, and using an its file generated by arch/arm/mach-imx/mkimage_fit_atf.sh.
ATF, TEE images have as well to be copied to uboot build dir, and their entry
points can be specified through environment variables.

5) Generate 'flash.bin'

The proposed script is taking care of 2), 3) and 5), with intention to support all
iMX8 platforms generating the mkimage config file on the fly and relying on
buildroot recipes to copy the required firmwares in images directory.

Current proposal does not generate the uboot FIT image, but this would likely be
an enhancement I would like to bring once 3) is achieved for all iMX8.

>
> >  .../common/imx/imx8-generate-fw-image.sh      | 52 +++++++++++++++++++
>
> We should perhaps find better names to distinguish
> imx8-bootloader-prepare.sh from imx8-generate-fw-image.sh, and make it
> clear which one is for which situation.
Would 'imx8-generate-upstream-image.sh' be more adapted ?

>
> Also, is your script suitable for all i.MX8? I see upstream U-Boot has
> separate image tools for i.MX8 and i.MX8M.
The current script supports only iMX8MM and iMX8MQ, but the concept is to
generate mkimage configuration file compatible with imx u-boot mkimage. So, this
scales up to any SoC supported by mainline u-boot.

Xavier
>
> Thanks for your feedback,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-04-28  8:53   ` Gary Bisson
@ 2020-04-28 20:05     ` Fabio Estevam
  0 siblings, 0 replies; 10+ messages in thread
From: Fabio Estevam @ 2020-04-28 20:05 UTC (permalink / raw)
  To: buildroot

On Tue, Apr 28, 2020 at 5:53 AM Gary Bisson
<gary.bisson@boundarydevices.com> wrote:

> Same, thanks for this proposal. However I'm not sure adding another
> script to basically do the same thing is the preferred option.
> The main difference being that it uses the U-Boot mkimage instead of
> imx-mkimage.
>
> Ideally I'd like to be able to use the flash.bin U-Boot target so that
> we get rid of those post-build scripts for good.
>
> Thomas, what U-Boot needs (for imx8m) are the DDR/HDMI firmware files from
> firmware-imx package. The main issue actually is that U-Boot looks for
> those binaries at its root. If we could make it point to $BINARIES_DIR
> instead, we could use 'flash.bin' target with U-Boot custom dependencies
> [1] (if this patch gets accepted) to ensure firmware-imx was built
> beforehand.
>
> Otherwise, if we decide to keep a post-build script, I'd rather have
> only one, preferrably this one as it doesn't depend on imx-mkimage.
> But as Fabio mentioned, it also needs to support 8QXP/8QM, then we could
> replaces imx8-bootloader-prepare.sh and also remove imx-mkimage package.
>
> Let me know your thoughts.

In case it helps, Jon Nettleton also worked on adding Buildroot
support for i.MX8M booting mainline U-Boot at:
https://github.com/SolidRun/buildroot/commit/0f2b2971e836b508bf9c2dac34426a59a9d83572

Glad to see Xavier's patch and looking forward to being able to
generate a Buildroot image for i.MX8M/8X that can boot mainline U-Boot
and kernel.

Thanks

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-04-27 21:57 ` Thomas Petazzoni
@ 2020-04-28  8:53   ` Gary Bisson
  2020-04-28 20:05     ` Fabio Estevam
  2020-04-28 21:50   ` Xavier Roumegue
  1 sibling, 1 reply; 10+ messages in thread
From: Gary Bisson @ 2020-04-28  8:53 UTC (permalink / raw)
  To: buildroot

Hi Xavier,

On Mon, Apr 27, 2020 at 11:57:04PM +0200, Thomas Petazzoni wrote:
> Hello Xavier,
> 
> On Mon, 27 Apr 2020 23:34:00 +0200
> Xavier Roumegue <xroumegue@gmail.com> wrote:
> 
> > This script aims to create an imx compatible boot image embedding
> > mainline components, using only upstream uboot mkimage tool, avoiding
> > dependencies on proprietary imx mkimage.
> > 
> > Mainline u-boot can generate a bootable image, but SPL soc proprietary
> > firmware dependencies have to be copied on uboot root dir.
> > 
> > This script prevents additional buildroot uboot recipe hacking to handle
> > custom SoC uboot build process.
> > 
> > The script actions summary is:
> > - Append DDR4 firmware to uboot spl binary
> > - Generate imx mkimage configuration file, extracting entry points from
> >   relevant elf files on the fly.
> > - Generate imx boot image using uboot upstream mkimage tool
> > 
> > Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>
> 
> Thanks for this proposal. Could you share a bit more details about the
> upstream U-Boot i.MX8 image generation logic? How does it work, how do
> you trigger it, which FW binaries need to be copied to the U-Boot build
> directory, etc. ?

Same, thanks for this proposal. However I'm not sure adding another
script to basically do the same thing is the preferred option.
The main difference being that it uses the U-Boot mkimage instead of
imx-mkimage.

Ideally I'd like to be able to use the flash.bin U-Boot target so that
we get rid of those post-build scripts for good.

Thomas, what U-Boot needs (for imx8m) are the DDR/HDMI firmware files from
firmware-imx package. The main issue actually is that U-Boot looks for
those binaries at its root. If we could make it point to $BINARIES_DIR
instead, we could use 'flash.bin' target with U-Boot custom dependencies
[1] (if this patch gets accepted) to ensure firmware-imx was built
beforehand.

Otherwise, if we decide to keep a post-build script, I'd rather have
only one, preferrably this one as it doesn't depend on imx-mkimage.
But as Fabio mentioned, it also needs to support 8QXP/8QM, then we could
replaces imx8-bootloader-prepare.sh and also remove imx-mkimage package.

Let me know your thoughts.

Regards,
Gary

[1] http://patchwork.ozlabs.org/project/buildroot/patch/20200425000629.2068191-1-heiko at sntech.de/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
  2020-04-27 21:34 Xavier Roumegue
@ 2020-04-27 21:57 ` Thomas Petazzoni
  2020-04-28  8:53   ` Gary Bisson
  2020-04-28 21:50   ` Xavier Roumegue
  0 siblings, 2 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2020-04-27 21:57 UTC (permalink / raw)
  To: buildroot

Hello Xavier,

On Mon, 27 Apr 2020 23:34:00 +0200
Xavier Roumegue <xroumegue@gmail.com> wrote:

> This script aims to create an imx compatible boot image embedding
> mainline components, using only upstream uboot mkimage tool, avoiding
> dependencies on proprietary imx mkimage.
> 
> Mainline u-boot can generate a bootable image, but SPL soc proprietary
> firmware dependencies have to be copied on uboot root dir.
> 
> This script prevents additional buildroot uboot recipe hacking to handle
> custom SoC uboot build process.
> 
> The script actions summary is:
> - Append DDR4 firmware to uboot spl binary
> - Generate imx mkimage configuration file, extracting entry points from
>   relevant elf files on the fly.
> - Generate imx boot image using uboot upstream mkimage tool
> 
> Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>

Thanks for this proposal. Could you share a bit more details about the
upstream U-Boot i.MX8 image generation logic? How does it work, how do
you trigger it, which FW binaries need to be copied to the U-Boot build
directory, etc. ?

>  .../common/imx/imx8-generate-fw-image.sh      | 52 +++++++++++++++++++

We should perhaps find better names to distinguish
imx8-bootloader-prepare.sh from imx8-generate-fw-image.sh, and make it
clear which one is for which situation.

Also, is your script suitable for all i.MX8? I see upstream U-Boot has
separate image tools for i.MX8 and i.MX8M.

Thanks for your feedback,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary
@ 2020-04-27 21:34 Xavier Roumegue
  2020-04-27 21:57 ` Thomas Petazzoni
  0 siblings, 1 reply; 10+ messages in thread
From: Xavier Roumegue @ 2020-04-27 21:34 UTC (permalink / raw)
  To: buildroot

This script aims to create an imx compatible boot image embedding
mainline components, using only upstream uboot mkimage tool, avoiding
dependencies on proprietary imx mkimage.

Mainline u-boot can generate a bootable image, but SPL soc proprietary
firmware dependencies have to be copied on uboot root dir.

This script prevents additional buildroot uboot recipe hacking to handle
custom SoC uboot build process.

The script actions summary is:
- Append DDR4 firmware to uboot spl binary
- Generate imx mkimage configuration file, extracting entry points from
  relevant elf files on the fly.
- Generate imx boot image using uboot upstream mkimage tool

Signed-off-by: Xavier Roumegue <xroumegue@gmail.com>
---
 .../common/imx/imx8-generate-fw-image.sh      | 52 +++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100755 board/freescale/common/imx/imx8-generate-fw-image.sh

diff --git a/board/freescale/common/imx/imx8-generate-fw-image.sh b/board/freescale/common/imx/imx8-generate-fw-image.sh
new file mode 100755
index 0000000000..eb9e96265b
--- /dev/null
+++ b/board/freescale/common/imx/imx8-generate-fw-image.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+get_entry()
+{
+    local elf_file=$1
+    readelf -h "$elf_file" | sed -e '/Entry/!d;s/.*:.*\(0x[0-9a-fA-F]\)/\1/g'
+}
+
+gen_cfg_file()
+{
+cat <<EOF > "$CFG_OUTFILE"
+#define __ASSEMBLY__
+
+FIT
+BOOT_FROM	sd
+LOADER		${SPL_DDR_BIN}	${SPL_ENTRY}
+SECOND_LOADER	${UBOOT_BIN}		${UBOOT_ENTRY} 0x60000
+
+EOF
+}
+
+gen_1stloader_bin()
+{
+    SPL_BIN_PAD="$(mktemp --suffix spl_pad.bin)"
+    dd if="${SPL_BIN}" of="${SPL_BIN_PAD}"  bs=4 conv=sync
+    cat "${SPL_BIN_PAD}" "${DDR_FW_BIN}" > "${SPL_DDR_BIN}"
+}
+
+gen_fw_image()
+{
+    "${HOST_DIR}"/bin/mkimage -n "${CFG_OUTFILE}" -T imx8mimage -e "${SPL_ENTRY}" -d "${UBOOT_BIN}" "${FLASH_BIN}"
+
+}
+main()
+{
+    UBOOT_BIN="${BINARIES_DIR}/u-boot.itb"
+    UBOOT_ELF="${BINARIES_DIR}/u-boot"
+    SPL_DDR_BIN="${BINARIES_DIR}/u-boot-spl-ddr.bin"
+    SPL_BIN="${BINARIES_DIR}/u-boot-spl.bin"
+    SPL_ELF="${BINARIES_DIR}/u-boot-spl"
+    CFG_OUTFILE="${BINARIES_DIR}/bootimage.cfg"
+    FLASH_BIN="${BINARIES_DIR}/imx8-boot-sd.bin"
+    UBOOT_ENTRY="$(get_entry "${UBOOT_ELF}")"
+    SPL_ENTRY="$(get_entry "${SPL_ELF}")"
+    DDR_FW_BIN="${BINARIES_DIR}/lpddr4_pmu_train_fw.bin"
+
+    gen_1stloader_bin
+    gen_cfg_file
+    gen_fw_image
+}
+
+main "$@"
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-11-10 20:44 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20200427211638.6047-1-xroumegue@gmail.com>
2020-04-27 21:44 ` [Buildroot] [PATCH 1/3] board/freescale/imx: Add helper to generate fw binary Fabio Estevam
2020-04-28 20:28   ` Xavier Roumegue
2020-07-16 21:04 ` Fabio Estevam
2020-04-27 21:34 Xavier Roumegue
2020-04-27 21:57 ` Thomas Petazzoni
2020-04-28  8:53   ` Gary Bisson
2020-04-28 20:05     ` Fabio Estevam
2020-04-28 21:50   ` Xavier Roumegue
2020-11-03 22:39     ` Thomas Petazzoni
2020-11-10 20:44       ` Xavier Roumegue

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.