[PATCH] imx8mq_evk: switch board to use binman for images

Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com --- arch/arm/dts/imx8mq-evk-u-boot.dtsi | 107 ++++++++++++++++++ arch/arm/mach-imx/imx8m/Kconfig | 1 + board/freescale/imx8mq_evk/Kconfig | 2 +- .../imx8mq_evk/imximage-8mq-lpddr4.cfg | 9 ++ configs/imx8mq_evk_defconfig | 2 +- doc/board/nxp/imx8mq_evk.rst | 24 ++-- 6 files changed, 133 insertions(+), 12 deletions(-) create mode 100644 board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg
diff --git a/arch/arm/dts/imx8mq-evk-u-boot.dtsi b/arch/arm/dts/imx8mq-evk-u-boot.dtsi index 2cfc12b7e0..a602ae55eb 100644 --- a/arch/arm/dts/imx8mq-evk-u-boot.dtsi +++ b/arch/arm/dts/imx8mq-evk-u-boot.dtsi @@ -1,5 +1,112 @@ // SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/ { + binman: binman { + multiple-images; + }; +}; + +&binman { + u-boot-spl-ddr { + filename = "u-boot-spl-ddr.bin"; + pad-byte = <0xff>; + align-size = <4>; + align = <4>; + + u-boot-spl { + align-end = <4>; + }; + + blob_1: blob-ext@1 { + filename = "lpddr4_pmu_train_1d_imem.bin"; + size = <0x8000>; + }; + + blob_2: blob-ext@2 { + filename = "lpddr4_pmu_train_1d_dmem.bin"; + size = <0x4000>; + }; + + blob_3: blob-ext@3 { + filename = "lpddr4_pmu_train_2d_imem.bin"; + size = <0x8000>; + }; + + blob_4: blob-ext@4 { + filename = "lpddr4_pmu_train_2d_dmem.bin"; + size = <0x4000>; + }; + }; + + flash { + mkimage { + args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000"; + + blob { + filename = "u-boot-spl-ddr.bin"; + }; + }; + }; + + itb { + filename = "u-boot.itb"; + + fit { + description = "Configuration to load ATF before U-Boot"; + #address-cells = <1>; + fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>; + + images { + uboot { + description = "U-Boot (64-bit)"; + type = "standalone"; + arch = "arm64"; + compression = "none"; + load = <CONFIG_SYS_TEXT_BASE>; + + uboot_blob: blob-ext { + filename = "u-boot-nodtb.bin"; + }; + }; + + atf { + description = "ARM Trusted Firmware"; + type = "firmware"; + arch = "arm64"; + compression = "none"; + load = <0x910000>; + entry = <0x910000>; + + atf_blob: blob-ext { + filename = "bl31.bin"; + }; + }; + + fdt { + description = "NAME"; + type = "flat_dt"; + compression = "none"; + + uboot_fdt_blob: blob-ext { + filename = "u-boot.dtb"; + }; + }; + }; + + configurations { + default = "conf"; + + conf { + description = "NAME"; + firmware = "uboot"; + loadables = "atf"; + fdt = "fdt"; + }; + }; + }; + }; +}; + &usdhc1 { mmc-hs400-1_8v; }; diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index 276b8bd974..c556e712b7 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -36,6 +36,7 @@ config TARGET_IMX8MQ_CM
config TARGET_IMX8MQ_EVK bool "imx8mq_evk" + select BINMAN select IMX8MQ select IMX8M_LPDDR4
diff --git a/board/freescale/imx8mq_evk/Kconfig b/board/freescale/imx8mq_evk/Kconfig index c4d20ad7c7..08f937f74f 100644 --- a/board/freescale/imx8mq_evk/Kconfig +++ b/board/freescale/imx8mq_evk/Kconfig @@ -10,6 +10,6 @@ config SYS_CONFIG_NAME default "imx8mq_evk"
config IMX_CONFIG - default "arch/arm/mach-imx/imx8m/imximage.cfg" + default "board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg"
endif diff --git a/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg b/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg new file mode 100644 index 0000000000..b89092a559 --- /dev/null +++ b/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2021 NXP + */ + +#define __ASSEMBLY__ + +BOOT_FROM sd +LOADER mkimage.flash.mkimage 0x7E1000 diff --git a/configs/imx8mq_evk_defconfig b/configs/imx8mq_evk_defconfig index 92aae70d4a..f82ce63281 100644 --- a/configs/imx8mq_evk_defconfig +++ b/configs/imx8mq_evk_defconfig @@ -24,7 +24,7 @@ CONFIG_SYS_LOAD_ADDR=0x40480000 CONFIG_FIT=y CONFIG_FIT_EXTERNAL_OFFSET=0x3000 CONFIG_SPL_LOAD_FIT=y -CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh" +# CONFIG_USE_SPL_FIT_GENERATOR is not set CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_LATE_INIT=y CONFIG_SPL_BOARD_INIT=y diff --git a/doc/board/nxp/imx8mq_evk.rst b/doc/board/nxp/imx8mq_evk.rst index c269fdebe3..d2dc611206 100644 --- a/doc/board/nxp/imx8mq_evk.rst +++ b/doc/board/nxp/imx8mq_evk.rst @@ -9,7 +9,7 @@ Quick Start -----------
- Build the ARM Trusted firmware binary -- Get ddr and hdmi fimware +- Obtain DDR firmware from NXP website - Build U-Boot - Boot
@@ -18,7 +18,8 @@ Get and Build the ARM Trusted firmware
Note: srctree is U-Boot source directory Get ATF from: https://source.codeaurora.org/external/imx/imx-atf -branch: imx_5.4.47_2.2.0 +branch: lf_v2.4 +Tag: lf-5.10.52-2.1.0
.. code-block:: bash
@@ -30,11 +31,10 @@ Get the ddr and hdmi firmware
.. code-block:: bash
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.9.bin - $ chmod +x firmware-imx-8.9.bin - $ ./firmware-imx-8.9.bin - $ cp firmware-imx-8.9/firmware/hdmi/cadence/signed_hdmi_imx8m.bin $(builddir) - $ cp firmware-imx-8.9/firmware/ddr/synopsys/lpddr4*.bin $(builddir) + $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.13.bin + $ chmod +x firmware-imx-8.13.bin + $ ./firmware-imx-8.13.bin + $ cp firmware-imx-8.13/firmware/ddr/synopsys/lpddr4*.bin $(builddir)
Build U-Boot ------------ @@ -43,14 +43,18 @@ Build U-Boot
$ export CROSS_COMPILE=aarch64-poky-linux- $ make imx8mq_evk_defconfig - $ make flash.bin + $ export ATF_LOAD_ADDR=0x910000 + $ make
-Burn the flash.bin to MicroSD card offset 33KB: +Burn the flash.bin (offset 33KB) and u-boot.itb (offset 384KB) to MicroSD card:
.. code-block:: bash
$sudo dd if=flash.bin of=/dev/sd[x] bs=1024 seek=33 conv=notrunc + $sudo dd if=u-boot.itb of=/dev/sd[x] bs=1024 seek=384 conv=notrunc
Boot ---- -Set Boot switch SW801: 1100 and Bmode: 10 to boot from Micro SD. +Set Boot switches to boot from Micro SD: +SW801: 1100 +SW802: 10
base-commit: 5b9ee01685290653671072d0030cd7ba9da3a705

Hi Andrey,
Thanks for the patch.
On Fri, Dec 3, 2021 at 12:30 PM Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com wrote:
-Burn the flash.bin to MicroSD card offset 33KB: +Burn the flash.bin (offset 33KB) and u-boot.itb (offset 384KB) to MicroSD card:
Could you please use the single flash.bin approach here too?
Please see commit: 028abfd9b157 ("imx8mm-evk: Generate a single bootable flash.bin again")
Thanks

Hello Fabio,
-----Original Message----- From: Fabio Estevam festevam@gmail.com Sent: Friday, December 3, 2021 4:54 PM To: ZHIZHIKIN Andrey andrey.zhizhikin@leica-geosystems.com Cc: U-Boot-Denx u-boot@lists.denx.de; Stefano Babic sbabic@denx.de; dl-uboot- imx uboot-imx@nxp.com; Peng Fan peng.fan@nxp.com; Heiko Schocher hs@denx.de; Teresa Remmet t.remmet@phytec.de; Jagan Teki jagan@amarulasolutions.com; Marcel Ziswiler marcel.ziswiler@toradex.com; Ilko Iliev iliev@ronetix.at; Heinrich Schuchardt xypron.glpk@gmx.de Subject: Re: [PATCH] imx8mq_evk: switch board to use binman for images
Hi Andrey,
Thanks for the patch.
On Fri, Dec 3, 2021 at 12:30 PM Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com wrote:
-Burn the flash.bin to MicroSD card offset 33KB: +Burn the flash.bin (offset 33KB) and u-boot.itb (offset 384KB) to MicroSD
card:
Could you please use the single flash.bin approach here too?
Please see commit: 028abfd9b157 ("imx8mm-evk: Generate a single bootable flash.bin again")
Sure thing! Thanks for pointing this out, I do remember there has been quite a discussion regarding this point, but I totally missed what was the outcome. Now I can see it in this commit quite clear. :)
I'll change the binman DT node now and push a V2.
Thanks
-- andrey

Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com ---
Changes in V2: - Modify binman and documentation to use single flash.bin file instead of flash.bin+u-boot.itb combination, suggested by Fabio Estevam.
arch/arm/dts/imx8mq-evk-u-boot.dtsi | 124 ++++++++++++++++++ arch/arm/mach-imx/imx8m/Kconfig | 1 + board/freescale/imx8mq_evk/Kconfig | 2 +- .../imx8mq_evk/imximage-8mq-lpddr4.cfg | 9 ++ configs/imx8mq_evk_defconfig | 2 +- doc/board/nxp/imx8mq_evk.rst | 21 +-- 6 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg
diff --git a/arch/arm/dts/imx8mq-evk-u-boot.dtsi b/arch/arm/dts/imx8mq-evk-u-boot.dtsi index 2cfc12b7e0..e3f780ca75 100644 --- a/arch/arm/dts/imx8mq-evk-u-boot.dtsi +++ b/arch/arm/dts/imx8mq-evk-u-boot.dtsi @@ -1,5 +1,129 @@ // SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/ { + binman: binman { + multiple-images; + }; +}; + +&binman { + u-boot-spl-ddr { + filename = "u-boot-spl-ddr.bin"; + pad-byte = <0xff>; + align-size = <4>; + align = <4>; + + u-boot-spl { + align-end = <4>; + }; + + blob_1: blob-ext@1 { + filename = "lpddr4_pmu_train_1d_imem.bin"; + size = <0x8000>; + }; + + blob_2: blob-ext@2 { + filename = "lpddr4_pmu_train_1d_dmem.bin"; + size = <0x4000>; + }; + + blob_3: blob-ext@3 { + filename = "lpddr4_pmu_train_2d_imem.bin"; + size = <0x8000>; + }; + + blob_4: blob-ext@4 { + filename = "lpddr4_pmu_train_2d_dmem.bin"; + size = <0x4000>; + }; + }; + + spl { + filename = "spl.bin"; + + mkimage { + args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000"; + + blob { + filename = "u-boot-spl-ddr.bin"; + }; + }; + }; + + itb { + filename = "u-boot.itb"; + + fit { + description = "Configuration to load ATF before U-Boot"; + #address-cells = <1>; + fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>; + + images { + uboot { + description = "U-Boot (64-bit)"; + type = "standalone"; + arch = "arm64"; + compression = "none"; + load = <CONFIG_SYS_TEXT_BASE>; + + uboot_blob: blob-ext { + filename = "u-boot-nodtb.bin"; + }; + }; + + atf { + description = "ARM Trusted Firmware"; + type = "firmware"; + arch = "arm64"; + compression = "none"; + load = <0x910000>; + entry = <0x910000>; + + atf_blob: blob-ext { + filename = "bl31.bin"; + }; + }; + + fdt { + description = "NAME"; + type = "flat_dt"; + compression = "none"; + + uboot_fdt_blob: blob-ext { + filename = "u-boot.dtb"; + }; + }; + }; + + configurations { + default = "conf"; + + conf { + description = "NAME"; + firmware = "uboot"; + loadables = "atf"; + fdt = "fdt"; + }; + }; + }; + }; + + imx-boot { + filename = "flash.bin"; + pad-byte = <0x00>; + + spl: blob-ext@1 { + offset = <0x0>; + filename = "spl.bin"; + }; + + uboot: blob-ext@2 { + offset = <0x57c00>; + filename = "u-boot.itb"; + }; + }; +}; + &usdhc1 { mmc-hs400-1_8v; }; diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index 276b8bd974..c556e712b7 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -36,6 +36,7 @@ config TARGET_IMX8MQ_CM
config TARGET_IMX8MQ_EVK bool "imx8mq_evk" + select BINMAN select IMX8MQ select IMX8M_LPDDR4
diff --git a/board/freescale/imx8mq_evk/Kconfig b/board/freescale/imx8mq_evk/Kconfig index c4d20ad7c7..08f937f74f 100644 --- a/board/freescale/imx8mq_evk/Kconfig +++ b/board/freescale/imx8mq_evk/Kconfig @@ -10,6 +10,6 @@ config SYS_CONFIG_NAME default "imx8mq_evk"
config IMX_CONFIG - default "arch/arm/mach-imx/imx8m/imximage.cfg" + default "board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg"
endif diff --git a/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg b/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg new file mode 100644 index 0000000000..90573be5fd --- /dev/null +++ b/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2021 NXP + */ + +#define __ASSEMBLY__ + +BOOT_FROM sd +LOADER u-boot-spl-ddr.bin 0x7E1000 diff --git a/configs/imx8mq_evk_defconfig b/configs/imx8mq_evk_defconfig index 92aae70d4a..f82ce63281 100644 --- a/configs/imx8mq_evk_defconfig +++ b/configs/imx8mq_evk_defconfig @@ -24,7 +24,7 @@ CONFIG_SYS_LOAD_ADDR=0x40480000 CONFIG_FIT=y CONFIG_FIT_EXTERNAL_OFFSET=0x3000 CONFIG_SPL_LOAD_FIT=y -CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh" +# CONFIG_USE_SPL_FIT_GENERATOR is not set CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_LATE_INIT=y CONFIG_SPL_BOARD_INIT=y diff --git a/doc/board/nxp/imx8mq_evk.rst b/doc/board/nxp/imx8mq_evk.rst index c269fdebe3..436e82151f 100644 --- a/doc/board/nxp/imx8mq_evk.rst +++ b/doc/board/nxp/imx8mq_evk.rst @@ -9,7 +9,7 @@ Quick Start -----------
- Build the ARM Trusted firmware binary -- Get ddr and hdmi fimware +- Obtain DDR firmware from NXP website - Build U-Boot - Boot
@@ -18,7 +18,8 @@ Get and Build the ARM Trusted firmware
Note: srctree is U-Boot source directory Get ATF from: https://source.codeaurora.org/external/imx/imx-atf -branch: imx_5.4.47_2.2.0 +branch: lf_v2.4 +Tag: lf-5.10.52-2.1.0
.. code-block:: bash
@@ -30,11 +31,10 @@ Get the ddr and hdmi firmware
.. code-block:: bash
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.9.bin - $ chmod +x firmware-imx-8.9.bin - $ ./firmware-imx-8.9.bin - $ cp firmware-imx-8.9/firmware/hdmi/cadence/signed_hdmi_imx8m.bin $(builddir) - $ cp firmware-imx-8.9/firmware/ddr/synopsys/lpddr4*.bin $(builddir) + $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.13.bin + $ chmod +x firmware-imx-8.13.bin + $ ./firmware-imx-8.13.bin + $ cp firmware-imx-8.13/firmware/ddr/synopsys/lpddr4*.bin $(builddir)
Build U-Boot ------------ @@ -43,7 +43,8 @@ Build U-Boot
$ export CROSS_COMPILE=aarch64-poky-linux- $ make imx8mq_evk_defconfig - $ make flash.bin + $ export ATF_LOAD_ADDR=0x910000 + $ make
Burn the flash.bin to MicroSD card offset 33KB:
@@ -53,4 +54,6 @@ Burn the flash.bin to MicroSD card offset 33KB:
Boot ---- -Set Boot switch SW801: 1100 and Bmode: 10 to boot from Micro SD. +Set Boot switches to boot from Micro SD: +SW801: 1100 +SW802: 10
base-commit: 5b9ee01685290653671072d0030cd7ba9da3a705

Hi Andrey,
On Fri, Dec 3, 2021 at 1:18 PM Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com wrote:
Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com
Changes in V2:
- Modify binman and documentation to use single flash.bin file instead of flash.bin+u-boot.itb combination, suggested by Fabio Estevam.
Thanks for the rework:
Reviewed-by: Fabio Estevam festevam@gmail.com

Hi Tom and Stefano,
On Fri, Dec 3, 2021 at 1:27 PM Fabio Estevam festevam@gmail.com wrote:
Hi Andrey,
On Fri, Dec 3, 2021 at 1:18 PM Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com wrote:
Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com
Changes in V2:
- Modify binman and documentation to use single flash.bin file instead of flash.bin+u-boot.itb combination, suggested by Fabio Estevam.
Thanks for the rework:
Reviewed-by: Fabio Estevam festevam@gmail.com
Please consider this one for 2022.01.
Thanks

On Mon, Dec 06, 2021 at 06:05:50PM -0300, Fabio Estevam wrote:
Hi Tom and Stefano,
On Fri, Dec 3, 2021 at 1:27 PM Fabio Estevam festevam@gmail.com wrote:
Hi Andrey,
On Fri, Dec 3, 2021 at 1:18 PM Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com wrote:
Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com
Changes in V2:
- Modify binman and documentation to use single flash.bin file instead of flash.bin+u-boot.itb combination, suggested by Fabio Estevam.
Thanks for the rework:
Reviewed-by: Fabio Estevam festevam@gmail.com
Please consider this one for 2022.01.
I believe this ends up being blocked on getting binman / CI happy with the files being missing?

Hi Tom,
On Mon, Dec 6, 2021 at 6:26 PM Tom Rini trini@konsulko.com wrote:
I believe this ends up being blocked on getting binman / CI happy with the files being missing?
This patch addresses the following build warning:
===================== WARNING ====================== This board uses CONFIG_SPL_FIT_GENERATOR. Please migrate to binman instead, to avoid the proliferation of UPD include/generated/dt.h arch-specific scripts with no tests. UPD include/generated/timestamp_autogenerated.h ====================================================
The other issue about missing files is orthogonal to this patch and it is being handled by Heiko's patch: https://www.mail-archive.com/u-boot@lists.denx.de/msg425275.html
Andrey's conversion to binman can be safely applied to 2022.01.

On Mon, Dec 06, 2021 at 06:38:00PM -0300, Fabio Estevam wrote:
Hi Tom,
On Mon, Dec 6, 2021 at 6:26 PM Tom Rini trini@konsulko.com wrote:
I believe this ends up being blocked on getting binman / CI happy with the files being missing?
This patch addresses the following build warning:
===================== WARNING ====================== This board uses CONFIG_SPL_FIT_GENERATOR. Please migrate to binman instead, to avoid the proliferation of UPD include/generated/dt.h arch-specific scripts with no tests. UPD include/generated/timestamp_autogenerated.h ====================================================
The other issue about missing files is orthogonal to this patch and it is being handled by Heiko's patch: https://www.mail-archive.com/u-boot@lists.denx.de/msg425275.html
Andrey's conversion to binman can be safely applied to 2022.01.
So this platform doesn't run in to the HDMI blob problem or similar, in CI?

On Mon, Dec 6, 2021 at 6:46 PM Tom Rini trini@konsulko.com wrote:
So this platform doesn't run in to the HDMI blob problem or similar, in CI?
imx8mq can happily boot without the HDMI firmware.
Please note that HDMI support for i.MX8MQ in mainline is still not available.

Hello Tom,
-----Original Message----- From: U-Boot u-boot-bounces@lists.denx.de On Behalf Of Andrey Zhizhikin Sent: Friday, December 3, 2021 5:18 PM To: u-boot@lists.denx.de Cc: sbabic@denx.de; festevam@gmail.com; uboot-imx@nxp.com; peng.fan@nxp.com; hs@denx.de; t.remmet@phytec.de; jagan@amarulasolutions.com; marcel.ziswiler@toradex.com; iliev@ronetix.at; xypron.glpk@gmx.de; Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com Subject: [PATCH v2] imx8mq_evk: switch board to use binman for images
Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com
Changes in V2:
- Modify binman and documentation to use single flash.bin file instead of flash.bin+u-boot.itb combination, suggested by Fabio Estevam.
Since you've applied similar patch from Peng, this one is not needed anymore and can be dropped.
There are however few pieces that are present in this patch not picked up in any other patch like doc update, single flash.bin, etc.
I saw that Patrick Wildt had "single flash.bin" part submitted in [1], which would also be beneficial to have in 2022.01 for consistency, and would allow me to update imx8mq_evk machine in meta-freescale Yocto layer so it can be finally built with upstream BSP and 2022.01. If you can pick it up saw well - that would be ideal!
The rest I will extract and send as separate patches after 2022.01.
arch/arm/dts/imx8mq-evk-u-boot.dtsi | 124 ++++++++++++++++++ arch/arm/mach-imx/imx8m/Kconfig | 1 + board/freescale/imx8mq_evk/Kconfig | 2 +- .../imx8mq_evk/imximage-8mq-lpddr4.cfg | 9 ++ configs/imx8mq_evk_defconfig | 2 +- doc/board/nxp/imx8mq_evk.rst | 21 +-- 6 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg
diff --git a/arch/arm/dts/imx8mq-evk-u-boot.dtsi b/arch/arm/dts/imx8mq-evk-u- boot.dtsi index 2cfc12b7e0..e3f780ca75 100644 --- a/arch/arm/dts/imx8mq-evk-u-boot.dtsi +++ b/arch/arm/dts/imx8mq-evk-u-boot.dtsi @@ -1,5 +1,129 @@ // SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/ {
- binman: binman {
multiple-images;
- };
+};
+&binman {
- u-boot-spl-ddr {
filename = "u-boot-spl-ddr.bin";
pad-byte = <0xff>;
align-size = <4>;
align = <4>;
u-boot-spl {
align-end = <4>;
};
blob_1: blob-ext@1 {
filename = "lpddr4_pmu_train_1d_imem.bin";
size = <0x8000>;
};
blob_2: blob-ext@2 {
filename = "lpddr4_pmu_train_1d_dmem.bin";
size = <0x4000>;
};
blob_3: blob-ext@3 {
filename = "lpddr4_pmu_train_2d_imem.bin";
size = <0x8000>;
};
blob_4: blob-ext@4 {
filename = "lpddr4_pmu_train_2d_dmem.bin";
size = <0x4000>;
};
- };
- spl {
filename = "spl.bin";
mkimage {
args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000";
blob {
filename = "u-boot-spl-ddr.bin";
};
};
- };
- itb {
filename = "u-boot.itb";
fit {
description = "Configuration to load ATF before U-Boot";
#address-cells = <1>;
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
images {
uboot {
description = "U-Boot (64-bit)";
type = "standalone";
arch = "arm64";
compression = "none";
load = <CONFIG_SYS_TEXT_BASE>;
uboot_blob: blob-ext {
filename = "u-boot-nodtb.bin";
};
};
atf {
description = "ARM Trusted Firmware";
type = "firmware";
arch = "arm64";
compression = "none";
load = <0x910000>;
entry = <0x910000>;
atf_blob: blob-ext {
filename = "bl31.bin";
};
};
fdt {
description = "NAME";
type = "flat_dt";
compression = "none";
uboot_fdt_blob: blob-ext {
filename = "u-boot.dtb";
};
};
};
configurations {
default = "conf";
conf {
description = "NAME";
firmware = "uboot";
loadables = "atf";
fdt = "fdt";
};
};
};
- };
- imx-boot {
filename = "flash.bin";
pad-byte = <0x00>;
spl: blob-ext@1 {
offset = <0x0>;
filename = "spl.bin";
};
uboot: blob-ext@2 {
offset = <0x57c00>;
filename = "u-boot.itb";
};
- };
+};
&usdhc1 { mmc-hs400-1_8v; }; diff --git a/arch/arm/mach-imx/imx8m/Kconfig b/arch/arm/mach-imx/imx8m/Kconfig index 276b8bd974..c556e712b7 100644 --- a/arch/arm/mach-imx/imx8m/Kconfig +++ b/arch/arm/mach-imx/imx8m/Kconfig @@ -36,6 +36,7 @@ config TARGET_IMX8MQ_CM
config TARGET_IMX8MQ_EVK bool "imx8mq_evk"
- select BINMAN select IMX8MQ select IMX8M_LPDDR4
diff --git a/board/freescale/imx8mq_evk/Kconfig b/board/freescale/imx8mq_evk/Kconfig index c4d20ad7c7..08f937f74f 100644 --- a/board/freescale/imx8mq_evk/Kconfig +++ b/board/freescale/imx8mq_evk/Kconfig @@ -10,6 +10,6 @@ config SYS_CONFIG_NAME default "imx8mq_evk"
config IMX_CONFIG
- default "arch/arm/mach-imx/imx8m/imximage.cfg"
- default "board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg"
endif diff --git a/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg b/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg new file mode 100644 index 0000000000..90573be5fd --- /dev/null +++ b/board/freescale/imx8mq_evk/imximage-8mq-lpddr4.cfg @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright 2021 NXP
- */
+#define __ASSEMBLY__
+BOOT_FROM sd +LOADER u-boot-spl-ddr.bin 0x7E1000 diff --git a/configs/imx8mq_evk_defconfig b/configs/imx8mq_evk_defconfig index 92aae70d4a..f82ce63281 100644 --- a/configs/imx8mq_evk_defconfig +++ b/configs/imx8mq_evk_defconfig @@ -24,7 +24,7 @@ CONFIG_SYS_LOAD_ADDR=0x40480000 CONFIG_FIT=y CONFIG_FIT_EXTERNAL_OFFSET=0x3000 CONFIG_SPL_LOAD_FIT=y -CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-imx/mkimage_fit_atf.sh" +# CONFIG_USE_SPL_FIT_GENERATOR is not set CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_LATE_INIT=y CONFIG_SPL_BOARD_INIT=y diff --git a/doc/board/nxp/imx8mq_evk.rst b/doc/board/nxp/imx8mq_evk.rst index c269fdebe3..436e82151f 100644 --- a/doc/board/nxp/imx8mq_evk.rst +++ b/doc/board/nxp/imx8mq_evk.rst @@ -9,7 +9,7 @@ Quick Start
- Build the ARM Trusted firmware binary
-- Get ddr and hdmi fimware +- Obtain DDR firmware from NXP website
- Build U-Boot
- Boot
@@ -18,7 +18,8 @@ Get and Build the ARM Trusted firmware
Note: srctree is U-Boot source directory Get ATF from: https://source.codeaurora.org/external/imx/imx-atf -branch: imx_5.4.47_2.2.0 +branch: lf_v2.4 +Tag: lf-5.10.52-2.1.0
.. code-block:: bash
@@ -30,11 +31,10 @@ Get the ddr and hdmi firmware
.. code-block:: bash
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.9.bin
- $ chmod +x firmware-imx-8.9.bin
- $ ./firmware-imx-8.9.bin
- $ cp firmware-imx-8.9/firmware/hdmi/cadence/signed_hdmi_imx8m.bin $(builddir)
- $ cp firmware-imx-8.9/firmware/ddr/synopsys/lpddr4*.bin $(builddir)
- $ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.13.bin
- $ chmod +x firmware-imx-8.13.bin
- $ ./firmware-imx-8.13.bin
- $ cp firmware-imx-8.13/firmware/ddr/synopsys/lpddr4*.bin $(builddir)
Build U-Boot
@@ -43,7 +43,8 @@ Build U-Boot
$ export CROSS_COMPILE=aarch64-poky-linux- $ make imx8mq_evk_defconfig
- $ make flash.bin
- $ export ATF_LOAD_ADDR=0x910000
- $ make
Burn the flash.bin to MicroSD card offset 33KB:
@@ -53,4 +54,6 @@ Burn the flash.bin to MicroSD card offset 33KB:
Boot
-Set Boot switch SW801: 1100 and Bmode: 10 to boot from Micro SD. +Set Boot switches to boot from Micro SD: +SW801: 1100 +SW802: 10
base-commit: 5b9ee01685290653671072d0030cd7ba9da3a705
2.25.1
-- andrey
Link: [1]: https://lore.kernel.org/u-boot/Ydmu+cqnqmTHoT0B@ryzen.fritz.box/

On Sat, Jan 08, 2022 at 08:18:15PM +0000, ZHIZHIKIN Andrey wrote:
Hello Tom,
-----Original Message----- From: U-Boot u-boot-bounces@lists.denx.de On Behalf Of Andrey Zhizhikin Sent: Friday, December 3, 2021 5:18 PM To: u-boot@lists.denx.de Cc: sbabic@denx.de; festevam@gmail.com; uboot-imx@nxp.com; peng.fan@nxp.com; hs@denx.de; t.remmet@phytec.de; jagan@amarulasolutions.com; marcel.ziswiler@toradex.com; iliev@ronetix.at; xypron.glpk@gmx.de; Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com Subject: [PATCH v2] imx8mq_evk: switch board to use binman for images
Currently i.MX8MQ EVK board still targeting the old image generation approach for image generation, which relies on the FIT generator that has been dropped from the tree.
Switch the board to use binman instead, which is a standard image generator now.
Update board documentation to correct build command, and advise latest firmware and TF-A versions to use.
NOTE: New image produced by binman does not have Signed HDMI FW support, this has been left on the side and does not interfere with the general boot flow.
Tested on: [i.MX8MQ rev2.0]
Signed-off-by: Andrey Zhizhikin andrey.zhizhikin@leica-geosystems.com
Changes in V2:
- Modify binman and documentation to use single flash.bin file instead of flash.bin+u-boot.itb combination, suggested by Fabio Estevam.
Since you've applied similar patch from Peng, this one is not needed anymore and can be dropped.
There are however few pieces that are present in this patch not picked up in any other patch like doc update, single flash.bin, etc.
I saw that Patrick Wildt had "single flash.bin" part submitted in [1], which would also be beneficial to have in 2022.01 for consistency, and would allow me to update imx8mq_evk machine in meta-freescale Yocto layer so it can be finally built with upstream BSP and 2022.01. If you can pick it up saw well - that would be ideal!
OK, yes, that's in my testing right now queue.
The rest I will extract and send as separate patches after 2022.01.
Thanks!
participants (4)
-
Andrey Zhizhikin
-
Fabio Estevam
-
Tom Rini
-
ZHIZHIKIN Andrey