When FSPI_CONF_HEADER is set, the binary needs to be built such
that there is a configuration file located at 0x400 and the start
of the file that would normally be flash.bin starts at 0x1000.
This used to be done properly until the device tree was converted to
nxp_imx8mimage.

Building these with the offsets built into the binman device tree
changes impacts how the actual image is built and the locations
of the various blobs aren't fetched properly and booting fails.

Fix this by building a standard image as if it were to boot from
eMMC or SD, then use that image as the input for a second image
which adds this FSPI header at 0x400, and then places the standard
image at offset 0x1000.  This also has the benefit of being able
to create both SD/eMMC image at the same time as a fspi image
called flexspi.bin.

Fixes: 37e50627efac ("ARM: dts: imx: Convert i.MX8M flash.bin image generation 
to binman")
Signed-off-by: Adam Ford <[email protected]>
---
 arch/arm/dts/imx8mn-u-boot.dtsi | 266 +++++++++++++++++---------------
 1 file changed, 138 insertions(+), 128 deletions(-)

diff --git a/arch/arm/dts/imx8mn-u-boot.dtsi b/arch/arm/dts/imx8mn-u-boot.dtsi
index 6875c6d44f..157e6b9a26 100644
--- a/arch/arm/dts/imx8mn-u-boot.dtsi
+++ b/arch/arm/dts/imx8mn-u-boot.dtsi
@@ -91,185 +91,195 @@
 };
 
 &binman {
-       filename = "flash.bin";
-       section {
-               pad-byte = <0x00>;
+       multiple-images;
 
-#ifdef CONFIG_FSPI_CONF_HEADER
-               fspi_conf_block {
-                       filename = CONFIG_FSPI_CONF_FILE;
-                       type = "blob-ext";
-                       offset = <0x400>;
-               };
-#endif
+       standard_image: image1 {
+               filename = "flash.bin";
+               section {
+                       pad-byte = <0x00>;
 
 #ifdef CONFIG_IMX_HAB
-               nxp-imx8mcst@0 {
-                       filename = "u-boot-spl-mkimage.signed.bin";
-                       nxp,loader-address = <CONFIG_SPL_TEXT_BASE>;
-                       nxp,unlock;
-                       args;   /* Needed by mkimage etype superclass */
-#endif
-
-                       binman_imx_spl: nxp-imx8mimage {
-                               filename = "u-boot-spl-mkimage.bin";
-                               nxp,boot-from = "sd";
-                               nxp,rom-version = <2>;
+                       nxp-imx8mcst@0 {
+                               filename = "u-boot-spl-mkimage.signed.bin";
                                nxp,loader-address = <CONFIG_SPL_TEXT_BASE>;
+                               nxp,unlock;
                                args;   /* Needed by mkimage etype superclass */
+#endif
 
-                               section {
-                                       filename = "u-boot-spl-ddr.bin";
-                                       pad-byte = <0xff>;
-                                       align-size = <4>;
-                                       align = <4>;
-
-                                       u-boot-spl {
-                                               align-end = <4>;
-                                               filename = "u-boot-spl.bin";
-                                       };
+                               binman_imx_spl: nxp-imx8mimage {
+                                       filename = "u-boot-spl-mkimage.bin";
+                                       nxp,boot-from = "sd";
+                                       nxp,rom-version = <2>;
+                                       nxp,loader-address = 
<CONFIG_SPL_TEXT_BASE>;
+                                       args;   /* Needed by mkimage etype 
superclass */
+
+                                       section {
+                                               filename = "u-boot-spl-ddr.bin";
+                                               pad-byte = <0xff>;
+                                               align-size = <4>;
+                                               align = <4>;
+
+                                               u-boot-spl {
+                                                       align-end = <4>;
+                                                       filename = 
"u-boot-spl.bin";
+                                               };
 
-                                       ddr-1d-imem-fw {
+                                               ddr-1d-imem-fw {
 #ifdef CONFIG_IMX8M_LPDDR4
-                                               filename = 
"lpddr4_pmu_train_1d_imem.bin";
+                                                       filename = 
"lpddr4_pmu_train_1d_imem.bin";
 #elif CONFIG_IMX8M_DDR4
-                                               filename = 
"ddr4_imem_1d_201810.bin";
+                                                       filename = 
"ddr4_imem_1d_201810.bin";
 #else
-                                               filename = "ddr3_imem_1d.bin";
+                                                       filename = 
"ddr3_imem_1d.bin";
 #endif
-                                               type = "blob-ext";
-                                               align-end = <4>;
-                                       };
+                                                       type = "blob-ext";
+                                                       align-end = <4>;
+                                               };
 
-                                       ddr-1d-dmem-fw {
+                                               ddr-1d-dmem-fw {
 #ifdef CONFIG_IMX8M_LPDDR4
-                                               filename = 
"lpddr4_pmu_train_1d_dmem.bin";
+                                                       filename = 
"lpddr4_pmu_train_1d_dmem.bin";
 #elif CONFIG_IMX8M_DDR4
-                                               filename = 
"ddr4_dmem_1d_201810.bin";
+                                                       filename = 
"ddr4_dmem_1d_201810.bin";
 #else
-                                               filename = "ddr3_dmem_1d.bin";
+                                                       filename = 
"ddr3_dmem_1d.bin";
 #endif
-                                               type = "blob-ext";
-                                               align-end = <4>;
-                                       };
+                                                       type = "blob-ext";
+                                                       align-end = <4>;
+                                               };
 
 #if defined(CONFIG_IMX8M_LPDDR4) || defined(CONFIG_IMX8M_DDR4)
-                                       ddr-2d-imem-fw {
+                                               ddr-2d-imem-fw {
 #ifdef CONFIG_IMX8M_LPDDR4
-                                               filename = 
"lpddr4_pmu_train_2d_imem.bin";
+                                                       filename = 
"lpddr4_pmu_train_2d_imem.bin";
 #else
-                                               filename = 
"ddr4_imem_2d_201810.bin";
+                                                       filename = 
"ddr4_imem_2d_201810.bin";
 #endif
-                                               type = "blob-ext";
-                                               align-end = <4>;
-                                       };
+                                                       type = "blob-ext";
+                                                       align-end = <4>;
+                                               };
 
-                                       ddr-2d-dmem-fw {
+                                               ddr-2d-dmem-fw {
 #ifdef CONFIG_IMX8M_LPDDR4
-                                               filename = 
"lpddr4_pmu_train_2d_dmem.bin";
+                                                       filename = 
"lpddr4_pmu_train_2d_dmem.bin";
 #else
-                                               filename = 
"ddr4_dmem_2d_201810.bin";
+                                                       filename = 
"ddr4_dmem_2d_201810.bin";
 #endif
-                                               type = "blob-ext";
-                                               align-end = <4>;
-                                       };
+                                                       type = "blob-ext";
+                                                       align-end = <4>;
+                                               };
 #endif
+                                       };
                                };
-                       };
 
 #ifdef CONFIG_IMX_HAB
-               };
+                       };
 
-               nxp-imx8mcst@1 {
-                       filename = "u-boot-fit.signed.bin";
-                       nxp,loader-address = <CONFIG_SPL_LOAD_FIT_ADDRESS>;
-#ifdef CONFIG_FSPI_CONF_HEADER
-                       offset = <0x59000>;
-#else
-                       offset = <0x58000>;
-#endif
-                       args;   /* Needed by mkimage etype superclass */
+                       nxp-imx8mcst@1 {
+                               filename = "u-boot-fit.signed.bin";
+                               nxp,loader-address = 
<CONFIG_SPL_LOAD_FIT_ADDRESS>;
+                               offset = <0x58000>;
+                               args;   /* Needed by mkimage etype superclass */
 #endif
 
-                       binman_imx_fit: fit {
-                               description = "Configuration to load ATF before 
U-Boot";
-                               filename = "u-boot.itb";
+                               binman_imx_fit: fit {
+                                       description = "Configuration to load 
ATF before U-Boot";
+                                       filename = "u-boot.itb";
 #ifndef CONFIG_IMX_HAB
-                               fit,external-offset = 
<CONFIG_FIT_EXTERNAL_OFFSET>;
+                                       fit,external-offset = 
<CONFIG_FIT_EXTERNAL_OFFSET>;
 #endif
-                               fit,fdt-list = "of-list";
-                               #address-cells = <1>;
-#ifdef CONFIG_FSPI_CONF_HEADER
-                               offset = <0x59000>;
-#else
-                               offset = <0x58000>;
-#endif
-
-                               images {
-                                       uboot {
-                                               arch = "arm64";
-                                               compression = "none";
-                                               description = "U-Boot (64-bit)";
-                                               load = <CONFIG_TEXT_BASE>;
-                                               type = "standalone";
-
-                                               uboot-blob {
-                                                       filename = 
"u-boot-nodtb.bin";
-                                                       type = "blob-ext";
+                                       fit,fdt-list = "of-list";
+                                       #address-cells = <1>;
+                                       offset = <0x58000>;
+
+                                       images {
+                                               uboot {
+                                                       arch = "arm64";
+                                                       compression = "none";
+                                                       description = "U-Boot 
(64-bit)";
+                                                       load = 
<CONFIG_TEXT_BASE>;
+                                                       type = "standalone";
+
+                                                       uboot-blob {
+                                                               filename = 
"u-boot-nodtb.bin";
+                                                               type = 
"blob-ext";
+                                                       };
                                                };
-                                       };
 
 #ifndef CONFIG_ARMV8_PSCI
-                                       atf {
-                                               arch = "arm64";
-                                               compression = "none";
-                                               description = "ARM Trusted 
Firmware";
-                                               entry = <0x960000>;
-                                               load = <0x960000>;
-                                               type = "firmware";
-
-                                               atf-blob {
-                                                       filename = "bl31.bin";
-                                                       type = "atf-bl31";
+                                               atf {
+                                                       arch = "arm64";
+                                                       compression = "none";
+                                                       description = "ARM 
Trusted Firmware";
+                                                       entry = <0x960000>;
+                                                       load = <0x960000>;
+                                                       type = "firmware";
+
+                                                       atf-blob {
+                                                               filename = 
"bl31.bin";
+                                                               type = 
"atf-bl31";
+                                                       };
                                                };
-                                       };
 #endif
 
-                                       binman_fip: fip {
-                                               arch = "arm64";
-                                               compression = "none";
-                                               description = "Trusted Firmware 
FIP";
-                                               load = <0x40310000>;
-                                               type = "firmware";
-                                       };
+                                               binman_fip: fip {
+                                                       arch = "arm64";
+                                                       compression = "none";
+                                                       description = "Trusted 
Firmware FIP";
+                                                       load = <0x40310000>;
+                                                       type = "firmware";
+                                               };
 
-                                       @fdt-SEQ {
-                                               compression = "none";
-                                               description = "NAME";
-                                               type = "flat_dt";
+                                               @fdt-SEQ {
+                                                       compression = "none";
+                                                       description = "NAME";
+                                                       type = "flat_dt";
 
-                                               uboot-fdt-blob {
-                                                       filename = "u-boot.dtb";
-                                                       type = "blob-ext";
+                                                       uboot-fdt-blob {
+                                                               filename = 
"u-boot.dtb";
+                                                               type = 
"blob-ext";
+                                                       };
                                                };
                                        };
-                               };
 
-                               configurations {
-                                       default = "@config-DEFAULT-SEQ";
+                                       configurations {
+                                               default = "@config-DEFAULT-SEQ";
 
-                                       @config-SEQ {
-                                               description = "NAME";
-                                               fdt = "fdt-SEQ";
-                                               firmware = "uboot";
+                                               @config-SEQ {
+                                                       description = "NAME";
+                                                       fdt = "fdt-SEQ";
+                                                       firmware = "uboot";
 #ifndef CONFIG_ARMV8_PSCI
-                                               loadables = "atf";
+                                                       loadables = "atf";
 #endif
+                                               };
                                        };
                                };
-                       };
 #ifdef CONFIG_IMX_HAB
-               };
+                       };
 #endif
+               };
+       };
+
+#ifdef CONFIG_FSPI_CONF_HEADER
+       flexspi_image: image2 {
+               filename = "flexspi.bin";
+               section {
+                       pad-byte = <0x00>;
+
+                       fspi_conf_block {
+                               filename = CONFIG_FSPI_CONF_FILE;
+                               type = "blob-ext";
+                               offset = <0x400>;
+                       };
+
+                       flashbin {
+                               filename = "flash.bin";
+                               type = "blob-ext";
+                               offset = <0x1000>;
+                       };
+               };
+
        };
+#endif
 };
-- 
2.45.2

Reply via email to