Also fixed rounding up in the header verification function. Previously Makefile was showing the header verification error but it was ignored.
Signed-off-by: Piotr Wojtaszczyk <[email protected]> --- Makefile | 2 +- arch/arm/Kconfig | 1 + arch/arm/dts/lpc32xx-u-boot.dtsi | 127 +++++++++++++++++++++++++++++++ tools/lpc32xximage.c | 3 +- 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 arch/arm/dts/lpc32xx-u-boot.dtsi diff --git a/Makefile b/Makefile index 7a3209bd9e..9bc6fe41e0 100644 --- a/Makefile +++ b/Makefile @@ -1481,7 +1481,7 @@ OBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \ u-boot-with-spl.bin: $(SPL_IMAGE) $(SPL_PAYLOAD) FORCE $(call if_changed,pad_cat) -ifeq ($(CONFIG_ARCH_LPC32XX)$(CONFIG_SPL),yy) +ifeq ($(CONFIG_ARCH_LPC32XX)_$(CONFIG_SPL)_$(CONFIG_BINMAN),y_y_) MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE) lpc32xx-spl.img: spl/u-boot-spl.bin FORCE diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index abd7c6c79a..95d8952e09 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -848,6 +848,7 @@ config ARCH_LPC32XX select GPIO_EXTRA_HEADER select SPL_DM if SPL select SUPPORT_SPL + select BINMAN if SPL && OF_CONTROL imply CMD_DM config ARCH_IMX8 diff --git a/arch/arm/dts/lpc32xx-u-boot.dtsi b/arch/arm/dts/lpc32xx-u-boot.dtsi new file mode 100644 index 0000000000..1df71d16a3 --- /dev/null +++ b/arch/arm/dts/lpc32xx-u-boot.dtsi @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright 2023 Timesys + * Author: Piotr Wojtaszczyk <[email protected]> + */ + +#include <config.h> + +#ifdef CONFIG_SPL +/ { + binman: binman { + multiple-images; + + /* SPL U-boot format for SPI NOR flash */ + lpc32xx-spl-spi { + filename = "lpc32xx-spl-spi.bin"; + pad-byte = <0xff>; + int32 { + value = <0x13579BDF>; + }; + file_size { + filename = "spl/u-boot-spl.bin"; + }; + blob { + filename = "spl/u-boot-spl.bin"; + }; + }; + + /* Full U-boot format for SPI NOR flash */ + lpc32xx-full-spi { + filename = "lpc32xx-full-spi.bin"; + pad-byte = <0xff>; + int32 { + value = <0x13579BDF>; + }; + file_size { + filename = "spl/u-boot-spl.bin"; + }; + blob@0 { + filename = "spl/u-boot-spl.bin"; + size = <CONFIG_SPL_PAD_TO>; + }; + blob@1 { + filename = "u-boot.img"; + }; + }; + + /* U-boot format for external, 32bit wide, static memory */ + lpc32xx-full-emc-32b { + filename = "lpc32xx-full-emc-32b.bin"; + pad-byte = <0xff>; + int32 { + value = <0x13579BD2>; + }; + blob@0 { + filename = "spl/u-boot-spl.bin"; + size = <CONFIG_SPL_PAD_TO>; + }; + blob@1 { + filename = "u-boot.img"; + }; + }; + + /* U-boot format for external, 16bit wide, static memory */ + lpc32xx-full-emc-16b { + filename = "lpc32xx-full-emc-16b.bin"; + pad-byte = <0xff>; + int32 { + value = <0x13579BD1>; + }; + blob@0 { + filename = "spl/u-boot-spl.bin"; + size = <CONFIG_SPL_PAD_TO>; + }; + blob@1 { + filename = "u-boot.img"; + }; + }; + + /* U-boot format for external, 8bit wide, static memory */ + lpc32xx-full-emc-8b { + filename = "lpc32xx-full-emc-8b.bin"; + pad-byte = <0xff>; + int32 { + value = <0x13579BD0>; + }; + blob@0 { + filename = "spl/u-boot-spl.bin"; + size = <CONFIG_SPL_PAD_TO>; + }; + blob@1 { + filename = "u-boot.img"; + }; + }; + + /* SPL U-boot format for NAND flash */ + lpc32xx-spl { + filename = "lpc32xx-spl.img"; + mkimage { + args = "-T lpc32xximage -a 0x0"; + blob { + filename = "spl/u-boot-spl.bin"; + }; + }; + }; + + /* Full U-boot format for NAND flash */ + /* CONFIG_SPL_PAD_TO should be set to NAND block size */ + lpc32xx-full { + filename = "lpc32xx-full.bin"; + pad-byte = <0xff>; + blob@0 { + filename = "lpc32xx-spl.img"; + size = <CONFIG_SPL_PAD_TO>; + }; + blob@1 { + filename = "lpc32xx-spl.img"; + size = <CONFIG_SPL_PAD_TO>; + }; + blob@2 { + filename = "u-boot.img"; + }; + }; + + }; +}; +#endif diff --git a/tools/lpc32xximage.c b/tools/lpc32xximage.c index 715a55a5b5..33f1a39174 100644 --- a/tools/lpc32xximage.c +++ b/tools/lpc32xximage.c @@ -86,7 +86,8 @@ static int lpc32xximage_verify_header(unsigned char *ptr, int image_size, (struct nand_page_0_boot_header *)ptr; /* turn image size from bytes to NAND pages, page 0 included */ - int image_size_in_pages = ((image_size - 1) + int image_size_in_pages = ((image_size + + LPC32XX_BOOT_NAND_PAGESIZE - 1) / LPC32XX_BOOT_NAND_PAGESIZE); if (hdr->data[0] != (0xff & LPC32XX_BOOT_ICR)) -- 2.25.1

