All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size
@ 2021-07-19 12:20 Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 01/41] tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS Marek Behún
                   ` (41 more replies)
  0 siblings, 42 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Marek Behún

Hi Stefan and others,

this is v2 of the series of improvements to kwboot, kwbimage and mvebu,
with main motivation the reduction of KWB image size.

Changes since v1:
- change of cover letter message + information about boot times added
- some additional small fix patches are added
- we do not remove the SPL code for loading U-Boot, but add the option to
  make BootROM do it. By default SPL code is used to load main U-Boot
  binary, since it seems to be faster than BootROM (at least on Turris
  Omnia). If users want to use BootROM for this, they need to disable
  the necessary media (SPI NOR / NAND / SATA) support in SPL

This series makes correct usage of BootROM's code for loading U-Boot
from NOR / NAND: currently, only SPL is read by BootROM and the main
U-Boot is read by SPL.

We can use BootROM to also load main U-Boot. This reduces the size of
the u-boot-spl.bin by about ~7 KiB, since it does not need to contain
code for reading NOR / NAND. This patch series makes it possible to
use BootROM for this, but since SPL code may read the main U-Boot
binary faster, we leave it to board maintainers to decide whether they
want to use BootROM or SPL code to load the main U-Boot binary. (The
rule of thumb, I guess, is to use SPL if you have enough space, and
BootROM if you need the additional 7 KiB.)

This patch series also reduces the size of the u-boot-spl.kwb binary
by addutuibak ~29 KiB (depending on board, this is on Turris Omnia),
by getting rid of the offseting of main U-Boot binary to a specific
point on the boot device, and instead using information from the
kwbimage header to find main U-Boot binary.

On Turris Omnia, the size differences and boot time differences are:
                  before     after      after with booting via BootROM
  u-boot-spl.kwb  901632 B   872960 B   864768 B
  u-boot-spl.bin  115526 B   115898 B   107994 B
  boot time         2426 ms    2411 ms    3283 ms

As can be seen, after this patch series, when still loading main U-Boot
binary via SPL code, the boot time is on Turris Omnia reduced from
2426 ms to 2411 ms. When booting via BootROM is preferred, the boot time
increases to 3283 ms, but we save additional 7 KiB in the u-boot-spl.kwb
binary.

Before merging, this series should be tested on as many relevant
boards as possible. The affected boards are:
- clearfog
- controlcenterdc
- db-88f6720
- db-88f6820-amc
- db-88f6820-gp
- db-mv784mp-gp
- ds414
- helios4
- theadorable_debug
- turris_omnia
- x530

Marek Behún (2):
  tools: kwbimage: Add constant for SDIO bootfrom
  tools: kwbimage: Cosmetic fix - remove redundant space character

Pali Rohár (39):
  tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS
  tools: kwbimage: Simplify aligning and calculating checksum
  tools: kwbimage: Align SPI and NAND images to 256 bytes
  tools: kwbimage: Fix generation of SATA, SDIO and PCIe images
  tools: kwbimage: Don't crash when binary file name does not contain
    '/'
  tools: kwbimage: Fix check for v0 extended header checksum
  tools: kwbimage: Validate extended headers of v1 images
  tools: kwbimage: Validate data checksum of v1 images
  tools: kwbimage: Print size of binary header in
    kwbimage_print_header()
  tools: kwbimage: Use -a parameter (load address) for v1 images
  tools: kwbimage: Change maximum number of arguments in binary header
    to 256
  tools: kwbimage: Fix calculating size of binary header
  tools: kwbimage: Add support for more BINARY headers
  tools: kwbimage: Don't parse PAYLOAD keyword
  tools: kwbimage: Add support for DATA command also for v1 images
  tools: kwbimage: Add support for a new DATA_DELAY command
  tools: kwbimage: Do not hide usage of secure header under
    CONFIG_ARMADA_38X
  tools: kwbimage: Mark all BootROM structures __packed
  tools: dumpimage: Fix crashing when trying to extract data from
    kwbimage
  tools: dumpimage: Show error message when trying to extract data from
    kwbimage
  tools: kwboot: Fix wrong parameter passed to read()
  tools: kwboot: Fix restoring terminal
  tools: kwboot: Print trailing newline after terminal is terminated
  tools: kwboot: Cosmetic fix - add missing curly brackets
  tools: kwboot: Check for v1 header size
  tools: kwboot: Fix checking image header version
  arm: mvebu: Fix return_to_bootrom()
  arm: mvebu: Mark return_to_bootrom() as a noreturn function
  arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework
  arm: mvebu: Use U-Boot's SPL BootROM framework for booting from
    NAND/UART
  SPL: Add support for specifying offset between header and image
  SPL: Add support for parsing board / BootROM specific image types
  arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage
    header
  arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files
  tools: kwbimage: Remove v1 kwbimage SPL padding to
    CONFIG_SYS_U_BOOT_OFFS bytes
  arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS
  arm: mvebu: gdsys: Remove custom spl_board_init()
  kwbimage: Add support for extracting images via dumpimage tool
  kwbimage: Update help message about how to extract from an existing
    image

 Makefile                               |   2 +-
 arch/arm/mach-mvebu/Kconfig            |  26 +-
 arch/arm/mach-mvebu/include/mach/cpu.h |   2 +-
 arch/arm/mach-mvebu/lowlevel_spl.S     |   3 +-
 arch/arm/mach-mvebu/spl.c              | 248 ++++++++++++--
 board/gdsys/a38x/Makefile              |   2 +-
 board/gdsys/a38x/spl.c                 |  20 --
 board/kobol/helios4/Kconfig            |   5 -
 board/solidrun/clearfog/Kconfig        |   5 -
 common/spl/Kconfig                     |   4 +-
 common/spl/spl.c                       |   9 +
 common/spl/spl_mmc.c                   |  16 +-
 common/spl/spl_sata.c                  |  12 +-
 common/spl/spl_spi.c                   |   2 +-
 configs/clearfog_defconfig             |   1 -
 configs/controlcenterdc_defconfig      |   1 -
 configs/db-88f6720_defconfig           |   1 -
 configs/db-88f6820-amc_defconfig       |   1 -
 configs/db-88f6820-gp_defconfig        |   2 -
 configs/db-mv784mp-gp_defconfig        |   1 -
 configs/ds414_defconfig                |   1 -
 configs/helios4_defconfig              |   1 -
 configs/maxbcm_defconfig               |   1 -
 configs/theadorable_debug_defconfig    |   1 -
 configs/turris_omnia_defconfig         |   1 -
 configs/x530_defconfig                 |   1 -
 include/configs/clearfog.h             |   7 +-
 include/configs/controlcenterdc.h      |   9 -
 include/configs/db-88f6720.h           |   3 -
 include/configs/db-88f6820-amc.h       |   5 -
 include/configs/db-88f6820-gp.h        |   7 -
 include/configs/db-mv784mp-gp.h        |   3 -
 include/configs/ds414.h                |   5 -
 include/configs/helios4.h              |   7 +-
 include/configs/theadorable.h          |   3 -
 include/configs/turris_omnia.h         |   7 -
 include/configs/x530.h                 |   3 -
 include/spl.h                          |   1 +
 scripts/config_whitelist.txt           |   1 -
 tools/Makefile                         |   8 -
 tools/kwbimage.c                       | 437 ++++++++++++++++++-------
 tools/kwbimage.h                       |  54 ++-
 tools/kwboot.c                         |  24 +-
 43 files changed, 651 insertions(+), 302 deletions(-)
 delete mode 100644 board/gdsys/a38x/spl.c

-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 01/41] tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 02/41] tools: kwbimage: Simplify aligning and calculating checksum Marek Behún
                   ` (40 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The CONFIG_SYS_U_BOOT_OFFS option may be defined as empty string.
In this case it causes compilation error:

    tools/kwbimage.c: In function ‘image_headersz_v1’:
    tools/kwbimage.c:1002:39: error: expected expression before ‘)’ token
      if (headersz > CONFIG_SYS_U_BOOT_OFFS) {
                                           ^
    tools/kwbimage.c:1006:41: error: expected expression before ‘)’ token
        (int)headersz, CONFIG_SYS_U_BOOT_OFFS);
                                             ^
    tools/kwbimage.c:1011:35: error: expected expression before ‘;’ token
      headersz = CONFIG_SYS_U_BOOT_OFFS;
                                       ^
    make[1]: *** [scripts/Makefile.host:112: tools/kwbimage.o] Error 1
    make: *** [Makefile:1822: tools] Error 2

Check whether the value of CONFIG_SYS_U_BOOT_OFFS is really set.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/Makefile b/tools/Makefile
index d020c55d66..fadf3135d6 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -155,7 +155,7 @@ ifdef CONFIG_FIT_CIPHER
 HOST_EXTRACFLAGS	+= -DCONFIG_FIT_CIPHER
 endif
 
-ifdef CONFIG_SYS_U_BOOT_OFFS
+ifneq ($(CONFIG_SYS_U_BOOT_OFFS),)
 HOSTCFLAGS_kwbimage.o += -DCONFIG_SYS_U_BOOT_OFFS=$(CONFIG_SYS_U_BOOT_OFFS)
 endif
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 02/41] tools: kwbimage: Simplify aligning and calculating checksum
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 01/41] tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 03/41] tools: kwbimage: Align SPI and NAND images to 256 bytes Marek Behún
                   ` (39 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The return value of kwbimage_generate() is used for aligning the data
part of kwbimage. Use it for calculating proper 4 byte alignment as is
required by BootROM and also use it for allocating additional 4 bytes
for the 32-bit data checksum.

This simplifies the alignment code to be only at one place (in function
kwbimage_generate) and also simplifies setting checksum as it can be
directly updated in memory.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 36 +++++++++++++++---------------------
 1 file changed, 15 insertions(+), 21 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 02fd0c949f..c775abf0e3 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -891,7 +891,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 
 	/* Fill in the main header */
 	main_hdr->blocksize =
-		cpu_to_le32(payloadsz + sizeof(uint32_t) - headersz);
+		cpu_to_le32(payloadsz - headersz);
 	main_hdr->srcaddr   = cpu_to_le32(headersz);
 	main_hdr->ext       = has_ext;
 	main_hdr->destaddr  = cpu_to_le32(params->addr);
@@ -1249,7 +1249,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 
 	/* Fill the main header */
 	main_hdr->blocksize    =
-		cpu_to_le32(payloadsz - headersz + sizeof(uint32_t));
+		cpu_to_le32(payloadsz - headersz);
 	main_hdr->headersz_lsb = cpu_to_le16(headersz & 0xFFFF);
 	main_hdr->headersz_msb = (headersz & 0xFFFF0000) >> 16;
 	main_hdr->destaddr     = cpu_to_le32(params->addr)
@@ -1519,7 +1519,6 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	size_t headersz = 0;
 	uint32_t checksum;
 	int ret;
-	int size;
 
 	fcfg = fopen(params->imagename, "r");
 	if (!fcfg) {
@@ -1547,9 +1546,6 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 		exit(EXIT_FAILURE);
 	}
 
-	/* The MVEBU BootROM does not allow non word aligned payloads */
-	sbuf->st_size = ALIGN(sbuf->st_size, 4);
-
 	version = image_get_version();
 	switch (version) {
 		/*
@@ -1580,16 +1576,10 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	free(image_cfg);
 
 	/* Build and add image checksum header */
-	checksum =
-		cpu_to_le32(image_checksum32((uint32_t *)ptr, sbuf->st_size));
-	size = write(ifd, &checksum, sizeof(uint32_t));
-	if (size != sizeof(uint32_t)) {
-		fprintf(stderr, "Error:%s - Checksum write %d bytes %s\n",
-			params->cmdname, size, params->imagefile);
-		exit(EXIT_FAILURE);
-	}
-
-	sbuf->st_size += sizeof(uint32_t);
+	checksum = cpu_to_le32(image_checksum32((uint8_t *)ptr + headersz,
+				sbuf->st_size - headersz - sizeof(uint32_t)));
+	memcpy((uint8_t *)ptr + sbuf->st_size - sizeof(uint32_t), &checksum,
+		sizeof(uint32_t));
 
 	/* Finally copy the header into the image area */
 	memcpy(ptr, image, headersz);
@@ -1650,6 +1640,7 @@ static int kwbimage_generate(struct image_tool_params *params,
 			     struct image_type_params *tparams)
 {
 	FILE *fcfg;
+	struct stat s;
 	int alloc_len;
 	int version;
 	void *hdr;
@@ -1662,6 +1653,12 @@ static int kwbimage_generate(struct image_tool_params *params,
 		exit(EXIT_FAILURE);
 	}
 
+	if (stat(params->datafile, &s)) {
+		fprintf(stderr, "Could not stat data file %s: %s\n",
+			params->datafile, strerror(errno));
+		exit(EXIT_FAILURE);
+	}
+
 	image_cfg = malloc(IMAGE_CFG_ELEMENT_MAX *
 			   sizeof(struct image_cfg_element));
 	if (!image_cfg) {
@@ -1719,12 +1716,9 @@ static int kwbimage_generate(struct image_tool_params *params,
 	/*
 	 * The resulting image needs to be 4-byte aligned. At least
 	 * the Marvell hdrparser tool complains if its unaligned.
-	 * By returning 1 here in this function, called via
-	 * tparams->vrec_header() in mkimage.c, mkimage will
-	 * automatically pad the the resulting image to a 4-byte
-	 * size if necessary.
+	 * After the image data is stored 4-byte checksum.
 	 */
-	return 1;
+	return 4 + (4 - s.st_size % 4) % 4;
 }
 
 /*
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 03/41] tools: kwbimage: Align SPI and NAND images to 256 bytes
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 01/41] tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 02/41] tools: kwbimage: Simplify aligning and calculating checksum Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 04/41] tools: kwbimage: Add constant for SDIO bootfrom Marek Behún
                   ` (38 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Writing into SPI NOR and NAND memory can be done only in 256 bytes long
blocks. Align final image size so that when it is burned into SPI NOR or
NAND memory via U-Boot's commands (sf or mtd), we can use the $filesize
variable directly as the length argument.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index c775abf0e3..f40ba0994d 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1510,6 +1510,17 @@ static int image_get_version(void)
 	return e->version;
 }
 
+static int image_get_bootfrom(void)
+{
+	struct image_cfg_element *e;
+
+	e = image_find_option(IMAGE_CFG_BOOT_FROM);
+	if (!e)
+		return -1;
+
+	return e->bootfrom;
+}
+
 static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 				struct image_tool_params *params)
 {
@@ -1642,6 +1653,7 @@ static int kwbimage_generate(struct image_tool_params *params,
 	FILE *fcfg;
 	struct stat s;
 	int alloc_len;
+	int bootfrom;
 	int version;
 	void *hdr;
 	int ret;
@@ -1678,6 +1690,7 @@ static int kwbimage_generate(struct image_tool_params *params,
 		exit(EXIT_FAILURE);
 	}
 
+	bootfrom = image_get_bootfrom();
 	version = image_get_version();
 	switch (version) {
 		/*
@@ -1717,8 +1730,12 @@ static int kwbimage_generate(struct image_tool_params *params,
 	 * The resulting image needs to be 4-byte aligned. At least
 	 * the Marvell hdrparser tool complains if its unaligned.
 	 * After the image data is stored 4-byte checksum.
+	 * Final SPI and NAND images must be aligned to 256 bytes.
 	 */
-	return 4 + (4 - s.st_size % 4) % 4;
+	if (bootfrom == IBR_HDR_SPI_ID || bootfrom == IBR_HDR_NAND_ID)
+		return 4 + (256 - (alloc_len + s.st_size + 4) % 256) % 256;
+	else
+		return 4 + (4 - s.st_size % 4) % 4;
 }
 
 /*
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 04/41] tools: kwbimage: Add constant for SDIO bootfrom
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (2 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 03/41] tools: kwbimage: Align SPI and NAND images to 256 bytes Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 05/41] tools: kwbimage: Fix generation of SATA, SDIO and PCIe images Marek Behún
                   ` (37 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Marek Behún

Add constant for SDIO value of the bootfrom header field.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index 0b6d05bef1..9856b44536 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -27,6 +27,7 @@
 #define IBR_HDR_SATA_ID			0x78
 #define IBR_HDR_PEX_ID			0x9C
 #define IBR_HDR_UART_ID			0x69
+#define IBR_HDR_SDIO_ID			0xAE
 #define IBR_DEF_ATTRIB	 		0x00
 
 /* Structure of the main header, version 0 (Kirkwood, Dove) */
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 05/41] tools: kwbimage: Fix generation of SATA, SDIO and PCIe images
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (3 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 04/41] tools: kwbimage: Add constant for SDIO bootfrom Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 06/41] tools: kwbimage: Don't crash when binary file name does not contain '/' Marek Behún
                   ` (36 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

SATA and SDIO images must be aligned to sector size (which in most cases
is 512 bytes) and Source Address in main header is stored in number of
sectors from the beginning of the drive. SATA image must be stored at
sector 1 and SDIO image at sector 0. Source Address for PCIe image is
not used and must be set to 0xFFFFFFFF.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index f40ba0994d..c65a40ecb7 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1281,6 +1281,28 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 			main_hdr->destaddr = cpu_to_le32(params->addr);
 	}
 
+	/*
+	 * For SATA srcaddr is specified in number of sectors starting from
+	 * sector 0. The main header is stored at sector number 1.
+	 * This expects the sector size to be 512 bytes.
+	 * Header size is already aligned.
+	 */
+	if (main_hdr->blockid == IBR_HDR_SATA_ID)
+		main_hdr->srcaddr = cpu_to_le32(headersz / 512 + 1);
+
+	/*
+	 * For SDIO srcaddr is specified in number of sectors starting from
+	 * sector 0. The main header is stored at sector number 0.
+	 * This expects sector size to be 512 bytes.
+	 * Header size is already aligned.
+	 */
+	if (main_hdr->blockid == IBR_HDR_SDIO_ID)
+		main_hdr->srcaddr = cpu_to_le32(headersz / 512);
+
+	/* For PCIe srcaddr is not used and must be set to 0xFFFFFFFF. */
+	if (main_hdr->blockid == IBR_HDR_PEX_ID)
+		main_hdr->srcaddr = cpu_to_le32(0xFFFFFFFF);
+
 #if defined(CONFIG_KWB_SECURE)
 	if (image_get_csk_index() >= 0) {
 		/*
@@ -1731,9 +1753,12 @@ static int kwbimage_generate(struct image_tool_params *params,
 	 * the Marvell hdrparser tool complains if its unaligned.
 	 * After the image data is stored 4-byte checksum.
 	 * Final SPI and NAND images must be aligned to 256 bytes.
+	 * Final SATA and SDIO images must be aligned to 512 bytes.
 	 */
 	if (bootfrom == IBR_HDR_SPI_ID || bootfrom == IBR_HDR_NAND_ID)
 		return 4 + (256 - (alloc_len + s.st_size + 4) % 256) % 256;
+	else if (bootfrom == IBR_HDR_SATA_ID || bootfrom == IBR_HDR_SDIO_ID)
+		return 4 + (512 - (alloc_len + s.st_size + 4) % 512) % 512;
 	else
 		return 4 + (4 - s.st_size % 4) % 4;
 }
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 06/41] tools: kwbimage: Don't crash when binary file name does not contain '/'
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (4 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 05/41] tools: kwbimage: Fix generation of SATA, SDIO and PCIe images Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 07/41] tools: kwbimage: Fix check for v0 extended header checksum Marek Behún
                   ` (35 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

In the case when the file name is specified relative to the current
working directory, it does not contain '/' character and strrchr()
returns NULL.

The following strcmp() function then crashes on NULL pointer
dereference.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index c65a40ecb7..724459fb8e 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1277,7 +1277,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	if (e) {
 		char *s = strrchr(e->binary.file, '/');
 
-		if (strcmp(s, "/binary.0") == 0)
+		if (s && strcmp(s, "/binary.0") == 0)
 			main_hdr->destaddr = cpu_to_le32(params->addr);
 	}
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 07/41] tools: kwbimage: Fix check for v0 extended header checksum
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (5 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 06/41] tools: kwbimage: Don't crash when binary file name does not contain '/' Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 08/41] tools: kwbimage: Validate extended headers of v1 images Marek Behún
                   ` (34 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Extended header checksum for v0 image is present only in the case when
extended header is present. Skip checksum validation if extended header
is not present.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 724459fb8e..4d9d818538 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1655,15 +1655,19 @@ static int kwbimage_verify_header(unsigned char *ptr, int image_size,
 
 	/* Only version 0 extended header has checksum */
 	if (image_version((void *)ptr) == 0) {
-		struct ext_hdr_v0 *ext_hdr;
+		struct main_hdr_v0 *mhdr = (struct main_hdr_v0 *)ptr;
 
-		ext_hdr = (struct ext_hdr_v0 *)
+		if (mhdr->ext & 0x1) {
+			struct ext_hdr_v0 *ext_hdr;
+
+			ext_hdr = (struct ext_hdr_v0 *)
 				(ptr + sizeof(struct main_hdr_v0));
-		checksum = image_checksum8(ext_hdr,
-					   sizeof(struct ext_hdr_v0)
-					   - sizeof(uint8_t));
-		if (checksum != ext_hdr->checksum)
-			return -FDT_ERR_BADSTRUCTURE;
+			checksum = image_checksum8(ext_hdr,
+						   sizeof(struct ext_hdr_v0)
+						   - sizeof(uint8_t));
+			if (checksum != ext_hdr->checksum)
+				return -FDT_ERR_BADSTRUCTURE;
+		}
 	}
 
 	return 0;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 08/41] tools: kwbimage: Validate extended headers of v1 images
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (6 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 07/41] tools: kwbimage: Fix check for v0 extended header checksum Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 09/41] tools: kwbimage: Validate data checksum " Marek Behún
                   ` (33 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Add basic checks for extended headers of v1 images.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 4d9d818538..5d017dd5ac 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1670,6 +1670,35 @@ static int kwbimage_verify_header(unsigned char *ptr, int image_size,
 		}
 	}
 
+	if (image_version((void *)ptr) == 1) {
+		struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr;
+
+		if (mhdr->ext & 0x1) {
+			uint32_t ohdr_size;
+			struct opt_hdr_v1 *ohdr = (struct opt_hdr_v1 *)
+						  (ptr + sizeof(*mhdr));
+
+			while (1) {
+				if ((uint8_t *)ohdr + sizeof(*ohdr) >
+				    (uint8_t *)mhdr + header_size)
+					return -FDT_ERR_BADSTRUCTURE;
+
+				ohdr_size = (ohdr->headersz_msb << 16) |
+					    le16_to_cpu(ohdr->headersz_lsb);
+
+				if (ohdr_size < 8 ||
+				    (uint8_t *)ohdr + ohdr_size >
+				    (uint8_t *)mhdr + header_size)
+					return -FDT_ERR_BADSTRUCTURE;
+
+				if (!(*((uint8_t *)ohdr + ohdr_size - 4) & 0x1))
+					break;
+				ohdr = (struct opt_hdr_v1 *)((uint8_t *)ohdr +
+							     ohdr_size);
+			}
+		}
+	}
+
 	return 0;
 }
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 09/41] tools: kwbimage: Validate data checksum of v1 images
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (7 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 08/41] tools: kwbimage: Validate extended headers of v1 images Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 10/41] tools: kwbimage: Print size of binary header in kwbimage_print_header() Marek Behún
                   ` (32 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The data part of v1 images contains 32-bit checksum after the data.
Validate whether this checksum is correct.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 5d017dd5ac..edda0ce7aa 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1672,6 +1672,8 @@ static int kwbimage_verify_header(unsigned char *ptr, int image_size,
 
 	if (image_version((void *)ptr) == 1) {
 		struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr;
+		uint32_t offset;
+		uint32_t size;
 
 		if (mhdr->ext & 0x1) {
 			uint32_t ohdr_size;
@@ -1697,6 +1699,47 @@ static int kwbimage_verify_header(unsigned char *ptr, int image_size,
 							     ohdr_size);
 			}
 		}
+
+		offset = le32_to_cpu(mhdr->srcaddr);
+
+		/*
+		 * For SATA srcaddr is specified in number of sectors.
+		 * The main header is must be stored at sector number 1.
+		 * This expects that sector size is 512 bytes and recalculates
+		 * data offset to bytes relative to the main header.
+		 */
+		if (mhdr->blockid == IBR_HDR_SATA_ID) {
+			if (offset < 1)
+				return -FDT_ERR_BADSTRUCTURE;
+			offset -= 1;
+			offset *= 512;
+		}
+
+		/*
+		 * For SDIO srcaddr is specified in number of sectors.
+		 * This expects that sector size is 512 bytes and recalculates
+		 * data offset to bytes.
+		 */
+		if (mhdr->blockid == IBR_HDR_SDIO_ID)
+			offset *= 512;
+
+		/*
+		 * For PCIe srcaddr is always set to 0xFFFFFFFF.
+		 * This expects that data starts after all headers.
+		 */
+		if (mhdr->blockid == IBR_HDR_PEX_ID && offset == 0xFFFFFFFF)
+			offset = header_size;
+
+		if (offset > image_size || offset % 4 != 0)
+			return -FDT_ERR_BADSTRUCTURE;
+
+		size = le32_to_cpu(mhdr->blocksize);
+		if (offset + size > image_size || size % 4 != 0)
+			return -FDT_ERR_BADSTRUCTURE;
+
+		if (image_checksum32(ptr + offset, size - 4) !=
+		    *(uint32_t *)(ptr + offset + size - 4))
+			return -FDT_ERR_BADSTRUCTURE;
 	}
 
 	return 0;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 10/41] tools: kwbimage: Print size of binary header in kwbimage_print_header()
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (8 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 09/41] tools: kwbimage: Validate data checksum " Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 11/41] tools: kwbimage: Cosmetic fix - remove redundant space character Marek Behún
                   ` (31 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The binary header in kwbimage contains executable SPL code.

Print information about this binary header and not only information
about it's data part.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index edda0ce7aa..bc30233871 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1627,6 +1627,30 @@ static void kwbimage_print_header(const void *ptr)
 	printf("Image Type:   MVEBU Boot from %s Image\n",
 	       image_boot_mode_name(mhdr->blockid));
 	printf("Image version:%d\n", image_version((void *)ptr));
+	if (image_version((void *)ptr) == 1) {
+		struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr;
+
+		if (mhdr->ext & 0x1) {
+			struct opt_hdr_v1 *ohdr = (struct opt_hdr_v1 *)
+						  ((uint8_t *)ptr +
+						   sizeof(*mhdr));
+
+			while (1) {
+				uint32_t ohdr_size;
+
+				ohdr_size = (ohdr->headersz_msb << 16) |
+					    le16_to_cpu(ohdr->headersz_lsb);
+				if (ohdr->headertype == OPT_HDR_V1_BINARY_TYPE) {
+					printf("BIN Hdr Size: ");
+					genimg_print_size(ohdr_size - 12 - 4 * ohdr->data[0]);
+				}
+				if (!(*((uint8_t *)ohdr + ohdr_size - 4) & 0x1))
+					break;
+				ohdr = (struct opt_hdr_v1 *)((uint8_t *)ohdr +
+							     ohdr_size);
+			}
+		}
+	}
 	printf("Data Size:    ");
 	genimg_print_size(mhdr->blocksize - sizeof(uint32_t));
 	printf("Load Address: %08x\n", mhdr->destaddr);
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 11/41] tools: kwbimage: Cosmetic fix - remove redundant space character
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (9 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 10/41] tools: kwbimage: Print size of binary header in kwbimage_print_header() Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 12/41] tools: kwbimage: Use -a parameter (load address) for v1 images Marek Behún
                   ` (30 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Marek Behún

Remove this space, since the constants are indented by tabs.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index 9856b44536..cab3d95d13 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -28,7 +28,7 @@
 #define IBR_HDR_PEX_ID			0x9C
 #define IBR_HDR_UART_ID			0x69
 #define IBR_HDR_SDIO_ID			0xAE
-#define IBR_DEF_ATTRIB	 		0x00
+#define IBR_DEF_ATTRIB			0x00
 
 /* Structure of the main header, version 0 (Kirkwood, Dove) */
 struct main_hdr_v0 {
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 12/41] tools: kwbimage: Use -a parameter (load address) for v1 images
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (10 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 11/41] tools: kwbimage: Cosmetic fix - remove redundant space character Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256 Marek Behún
                   ` (29 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The data part of v1 kwbimage currently contains U-Boot binary prepended
by 64 bytes long Legacy U-Boot image header. This means that the load
address is currently substracted by 64 bytes to ensure that U-Boot's
entry point is at specified execution address.

As mkimage has already separate arguments for load (-a) and execution
(-e) address, there is no need to derive fixed load address from
execution address.

Therefore remove this load address hack from the kwbimage tool and
support generating v1 kwbimage with arbitrary addresses for load and
execution.

Finally, calculate correct load address by caller for mkimage tool in
Makefile. File u-boot-spl.kwb is always a v1 kwbimage and it is the only
v1 kwbimage which U-Boot's build system generates.

Remove also useless overwriting of destaddr for /binary.0 to the value
which is already set on previous lines.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 Makefile         |  2 +-
 tools/kwbimage.c | 10 +---------
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index bc404c8f98..a5a9aef175 100644
--- a/Makefile
+++ b/Makefile
@@ -1405,7 +1405,7 @@ MKIMAGEFLAGS_u-boot.kwb = -n $(KWD_CONFIG_FILE) \
 	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
 
 MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
-	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
+	-T kwbimage -a $(shell printf "0x%x" $$(($(CONFIG_SYS_TEXT_BASE)-64))) -e $(CONFIG_SYS_TEXT_BASE) \
 	$(if $(KEYDIR),-k $(KEYDIR))
 
 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index bc30233871..76c25628d4 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1252,8 +1252,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 		cpu_to_le32(payloadsz - headersz);
 	main_hdr->headersz_lsb = cpu_to_le16(headersz & 0xFFFF);
 	main_hdr->headersz_msb = (headersz & 0xFFFF0000) >> 16;
-	main_hdr->destaddr     = cpu_to_le32(params->addr)
-				 - sizeof(image_header_t);
+	main_hdr->destaddr     = cpu_to_le32(params->addr);
 	main_hdr->execaddr     = cpu_to_le32(params->ep);
 	main_hdr->srcaddr      = cpu_to_le32(headersz);
 	main_hdr->ext          = hasext;
@@ -1273,13 +1272,6 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	e = image_find_option(IMAGE_CFG_DEBUG);
 	if (e)
 		main_hdr->flags = e->debug ? 0x1 : 0;
-	e = image_find_option(IMAGE_CFG_BINARY);
-	if (e) {
-		char *s = strrchr(e->binary.file, '/');
-
-		if (s && strcmp(s, "/binary.0") == 0)
-			main_hdr->destaddr = cpu_to_le32(params->addr);
-	}
 
 	/*
 	 * For SATA srcaddr is specified in number of sectors starting from
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (11 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 12/41] tools: kwbimage: Use -a parameter (load address) for v1 images Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:31   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header Marek Behún
                   ` (28 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The number is stored in one byte, so the maximum should be 255.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 76c25628d4..2d4574af7d 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -89,7 +89,7 @@ struct nand_ecc_mode nand_ecc_modes[] = {
 /* Used to identify an undefined execution or destination address */
 #define ADDR_INVALID ((uint32_t)-1)
 
-#define BINARY_MAX_ARGS 8
+#define BINARY_MAX_ARGS 255
 
 /* In-memory representation of a line of the configuration file */
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (12 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256 Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:32   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers Marek Behún
                   ` (27 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Binary header consist of:
* 1 byte for header type
* 3 bytes for header size
* 1 byte for number of arguments
* 3 reserved bytes
* N*4 bytes for arguments
* M bytes (aligned to 4 bytes) for executable data
* 1 byte for information about next header
* 3 reserved bytes

The first four bytes are specified as
  sizeof(struct opt_hdr_v1)
and the remaining bytes as
  ALIGN(s.st_size, 4) + (binarye->binary.nargs + 2) * sizeof(uint32_t)

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 2d4574af7d..6c9f93ae8b 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -984,7 +984,7 @@ static size_t image_headersz_v1(int *hasext)
 		}
 
 		headersz += sizeof(struct opt_hdr_v1) +
-			s.st_size +
+			ALIGN(s.st_size, 4) +
 			(binarye->binary.nargs + 2) * sizeof(uint32_t);
 		if (hasext)
 			*hasext = 1;
@@ -1051,14 +1051,7 @@ int add_binary_header_v1(uint8_t *cur)
 
 	binhdrsz = sizeof(struct opt_hdr_v1) +
 		(binarye->binary.nargs + 2) * sizeof(uint32_t) +
-		s.st_size;
-
-	/*
-	 * The size includes the binary image size, rounded
-	 * up to a 4-byte boundary. Plus 4 bytes for the
-	 * next-header byte and 3-byte alignment at the end.
-	 */
-	binhdrsz = ALIGN(binhdrsz, 4) + 4;
+		ALIGN(s.st_size, 4);
 	hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF);
 	hdr->headersz_msb = (binhdrsz & 0xFFFF0000) >> 16;
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (13 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:32   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword Marek Behún
                   ` (26 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The kwbimage v1 format supports multiple BINARY executable headers.
Add support for it into mkimage/kwbimage tool.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 59 +++++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 31 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 6c9f93ae8b..1bfc524424 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -942,6 +942,7 @@ static size_t image_headersz_v1(int *hasext)
 {
 	struct image_cfg_element *binarye;
 	size_t headersz;
+	int cfgi;
 
 	/*
 	 * Calculate the size of the header and the size of the
@@ -949,21 +950,19 @@ static size_t image_headersz_v1(int *hasext)
 	 */
 	headersz = sizeof(struct main_hdr_v1);
 
-	if (image_count_options(IMAGE_CFG_BINARY) > 1) {
-		fprintf(stderr, "More than one binary blob, not supported\n");
-		return 0;
-	}
-
 	if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) {
 		fprintf(stderr, "More than one payload, not possible\n");
 		return 0;
 	}
 
-	binarye = image_find_option(IMAGE_CFG_BINARY);
-	if (binarye) {
+	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		int ret;
 		struct stat s;
 
+		binarye = &image_cfg[cfgi];
+		if (binarye->type != IMAGE_CFG_BINARY)
+			continue;
+
 		ret = stat(binarye->binary.file, &s);
 		if (ret < 0) {
 			char cwd[PATH_MAX];
@@ -1018,10 +1017,10 @@ static size_t image_headersz_v1(int *hasext)
 	return ALIGN(headersz, 4096);
 }
 
-int add_binary_header_v1(uint8_t *cur)
+int add_binary_header_v1(uint8_t **cur, uint8_t **next_ext,
+			 struct image_cfg_element *binarye)
 {
-	struct image_cfg_element *binarye;
-	struct opt_hdr_v1 *hdr = (struct opt_hdr_v1 *)cur;
+	struct opt_hdr_v1 *hdr = (struct opt_hdr_v1 *)*cur;
 	uint32_t *args;
 	size_t binhdrsz;
 	struct stat s;
@@ -1029,11 +1028,6 @@ int add_binary_header_v1(uint8_t *cur)
 	FILE *bin;
 	int ret;
 
-	binarye = image_find_option(IMAGE_CFG_BINARY);
-
-	if (!binarye)
-		return 0;
-
 	hdr->headertype = OPT_HDR_V1_BINARY_TYPE;
 
 	bin = fopen(binarye->binary.file, "r");
@@ -1055,17 +1049,17 @@ int add_binary_header_v1(uint8_t *cur)
 	hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF);
 	hdr->headersz_msb = (binhdrsz & 0xFFFF0000) >> 16;
 
-	cur += sizeof(struct opt_hdr_v1);
+	*cur += sizeof(struct opt_hdr_v1);
 
-	args = (uint32_t *)cur;
+	args = (uint32_t *)*cur;
 	*args = cpu_to_le32(binarye->binary.nargs);
 	args++;
 	for (argi = 0; argi < binarye->binary.nargs; argi++)
 		args[argi] = cpu_to_le32(binarye->binary.args[argi]);
 
-	cur += (binarye->binary.nargs + 1) * sizeof(uint32_t);
+	*cur += (binarye->binary.nargs + 1) * sizeof(uint32_t);
 
-	ret = fread(cur, s.st_size, 1, bin);
+	ret = fread(*cur, s.st_size, 1, bin);
 	if (ret != 1) {
 		fprintf(stderr,
 			"Could not read binary image %s\n",
@@ -1075,17 +1069,13 @@ int add_binary_header_v1(uint8_t *cur)
 
 	fclose(bin);
 
-	cur += ALIGN(s.st_size, 4);
+	*cur += ALIGN(s.st_size, 4);
 
-	/*
-	 * For now, we don't support more than one binary
-	 * header, and no other header types are
-	 * supported. So, the binary header is necessarily the
-	 * last one
-	 */
-	*((uint32_t *)cur) = 0x00000000;
+	*((uint32_t *)*cur) = 0x00000000;
+	**next_ext = 1;
+	*next_ext = *cur;
 
-	cur += sizeof(uint32_t);
+	*cur += sizeof(uint32_t);
 
 	return 0;
 
@@ -1218,6 +1208,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	uint8_t *image, *cur;
 	int hasext = 0;
 	uint8_t *next_ext = NULL;
+	int cfgi;
 
 	/*
 	 * Calculate the size of the header and the size of the
@@ -1296,13 +1287,19 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 		 */
 		secure_hdr = (struct secure_hdr_v1 *)cur;
 		cur += sizeof(struct secure_hdr_v1);
+		*next_ext = 1;
 		next_ext = &secure_hdr->next;
 	}
 #endif
-	*next_ext = 1;
 
-	if (add_binary_header_v1(cur))
-		return NULL;
+	for (cfgi = 0; cfgi < cfgn; cfgi++) {
+		e = &image_cfg[cfgi];
+		if (e->type != IMAGE_CFG_BINARY)
+			continue;
+
+		if (add_binary_header_v1(&cur, &next_ext, e))
+			return NULL;
+	}
 
 #if defined(CONFIG_KWB_SECURE)
 	if (secure_hdr && add_secure_header_v1(params, ptr, payloadsz,
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (14 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:33   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images Marek Behún
                   ` (25 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The PAYLOAD keyword does nothing. No code is using it and both mkimage
and kwbimage completely ignore it. It looks like a relict from the past.
The payload image itself can be specified only via -d parameter to
mkimage.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 1bfc524424..74a77412d7 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -103,7 +103,6 @@ enum image_cfg_type {
 	IMAGE_CFG_NAND_ECC_MODE,
 	IMAGE_CFG_NAND_PAGESZ,
 	IMAGE_CFG_BINARY,
-	IMAGE_CFG_PAYLOAD,
 	IMAGE_CFG_DATA,
 	IMAGE_CFG_BAUDRATE,
 	IMAGE_CFG_DEBUG,
@@ -131,7 +130,6 @@ static const char * const id_strs[] = {
 	[IMAGE_CFG_NAND_ECC_MODE] = "NAND_ECC_MODE",
 	[IMAGE_CFG_NAND_PAGESZ] = "NAND_PAGE_SIZE",
 	[IMAGE_CFG_BINARY] = "BINARY",
-	[IMAGE_CFG_PAYLOAD] = "PAYLOAD",
 	[IMAGE_CFG_DATA] = "DATA",
 	[IMAGE_CFG_BAUDRATE] = "BAUDRATE",
 	[IMAGE_CFG_DEBUG] = "DEBUG",
@@ -157,7 +155,6 @@ struct image_cfg_element {
 			unsigned int args[BINARY_MAX_ARGS];
 			unsigned int nargs;
 		} binary;
-		const char *payload;
 		unsigned int dstaddr;
 		unsigned int execaddr;
 		unsigned int nandblksz;
@@ -874,11 +871,6 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 		headersz += sizeof(struct ext_hdr_v0);
 	}
 
-	if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) {
-		fprintf(stderr, "More than one payload, not possible\n");
-		return NULL;
-	}
-
 	image = malloc(headersz);
 	if (!image) {
 		fprintf(stderr, "Cannot allocate memory for image\n");
@@ -950,11 +942,6 @@ static size_t image_headersz_v1(int *hasext)
 	 */
 	headersz = sizeof(struct main_hdr_v1);
 
-	if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) {
-		fprintf(stderr, "More than one payload, not possible\n");
-		return 0;
-	}
-
 	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		int ret;
 		struct stat s;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (15 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:35   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command Marek Behún
                   ` (24 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The DATA command is already supported by mkimage for v0 images, but not
for v1 images.

BootROM code which executes v1 images also supports DATA command via an
optional extended v1 header OPT_HDR_V1_REGISTER_TYPE.

Implement support for DATA command for v1 images.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 32 +++++++++++++++++++++++++++++++-
 tools/kwbimage.h | 27 +++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 74a77412d7..b585f49180 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -933,6 +933,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 static size_t image_headersz_v1(int *hasext)
 {
 	struct image_cfg_element *binarye;
+	unsigned int count;
 	size_t headersz;
 	int cfgi;
 
@@ -942,6 +943,10 @@ static size_t image_headersz_v1(int *hasext)
 	 */
 	headersz = sizeof(struct main_hdr_v1);
 
+	count = image_count_options(IMAGE_CFG_DATA);
+	if (count > 0)
+		headersz += sizeof(struct register_set_hdr_v1) + 8 * count + 4;
+
 	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		int ret;
 		struct stat s;
@@ -1188,6 +1193,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 {
 	struct image_cfg_element *e;
 	struct main_hdr_v1 *main_hdr;
+	struct register_set_hdr_v1 *register_set_hdr;
 #if defined(CONFIG_KWB_SECURE)
 	struct secure_hdr_v1 *secure_hdr = NULL;
 #endif
@@ -1195,7 +1201,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	uint8_t *image, *cur;
 	int hasext = 0;
 	uint8_t *next_ext = NULL;
-	int cfgi;
+	int cfgi, datai, size;
 
 	/*
 	 * Calculate the size of the header and the size of the
@@ -1279,6 +1285,30 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	}
 #endif
 
+	datai = 0;
+	register_set_hdr = (struct register_set_hdr_v1 *)cur;
+	for (cfgi = 0; cfgi < cfgn; cfgi++) {
+		e = &image_cfg[cfgi];
+		if (e->type != IMAGE_CFG_DATA)
+			continue;
+		register_set_hdr->data[datai].entry.address =
+			cpu_to_le32(e->regdata.raddr);
+		register_set_hdr->data[datai].entry.value =
+			cpu_to_le32(e->regdata.rdata);
+		datai++;
+	}
+	if (datai != 0) {
+		size = sizeof(struct register_set_hdr_v1) + 8 * datai + 4;
+		register_set_hdr->headertype = OPT_HDR_V1_REGISTER_TYPE;
+		register_set_hdr->headersz_lsb = cpu_to_le16(size & 0xFFFF);
+		register_set_hdr->headersz_msb = size >> 16;
+		/* Set delay to the smallest possible value 1ms. */
+		register_set_hdr->data[datai].last_entry.delay = 1;
+		cur += size;
+		*next_ext = 1;
+		next_ext = &register_set_hdr->data[datai].last_entry.next;
+	}
+
 	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		e = &image_cfg[cfgi];
 		if (e->type != IMAGE_CFG_BINARY)
diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index cab3d95d13..9f86da46e8 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -148,6 +148,33 @@ struct secure_hdr_v1 {
 	uint16_t reserved5;		/* 0x25E2 - 0x25E3 */
 };
 
+/*
+ * Structure of register set
+ */
+struct register_set_hdr_v1 {
+	uint8_t  headertype;		/* 0x0 */
+	uint8_t  headersz_msb;		/* 0x1 */
+	uint16_t headersz_lsb;		/* 0x2 - 0x3 */
+	union {
+		struct {
+			uint32_t address;	/* 0x4+8*N - 0x7+8*N */
+			uint32_t value;		/* 0x8+8*N - 0xB+8*N */
+		} entry;
+		struct {
+			uint8_t  next;		/* 0xC+8*N */
+			uint8_t  delay;		/* 0xD+8*N */
+			uint16_t reserved;	/* 0xE+8*N - 0xF+8*N */
+		} last_entry;
+	} data[];
+};
+
+/*
+ * Value 0 in register_set_hdr_v1 delay field is special.
+ * Instead of delay it setup SDRAM Controller.
+ */
+#define REGISTER_SET_HDR_OPT_DELAY_SDRAM_SETUP 0
+#define REGISTER_SET_HDR_OPT_DELAY_MS(val) ((val) ?: 1)
+
 /*
  * Various values for the opt_hdr_v1->headertype field, describing the
  * different types of optional headers. The "secure" header contains
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (16 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:35   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X Marek Behún
                   ` (23 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

This command is supported only by v1 images and specifies a milliseconds
delay after executing some set of DATA commands. The special string value
SDRAM_SETUP instructs BootROM to setup SDRAM controller instead of
executing delay. SDRAM_SETUP may be specified only once and after the
last DATA command.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwbimage.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index b585f49180..469e5b55f2 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -104,6 +104,7 @@ enum image_cfg_type {
 	IMAGE_CFG_NAND_PAGESZ,
 	IMAGE_CFG_BINARY,
 	IMAGE_CFG_DATA,
+	IMAGE_CFG_DATA_DELAY,
 	IMAGE_CFG_BAUDRATE,
 	IMAGE_CFG_DEBUG,
 	IMAGE_CFG_KAK,
@@ -131,6 +132,7 @@ static const char * const id_strs[] = {
 	[IMAGE_CFG_NAND_PAGESZ] = "NAND_PAGE_SIZE",
 	[IMAGE_CFG_BINARY] = "BINARY",
 	[IMAGE_CFG_DATA] = "DATA",
+	[IMAGE_CFG_DATA_DELAY] = "DATA_DELAY",
 	[IMAGE_CFG_BAUDRATE] = "BAUDRATE",
 	[IMAGE_CFG_DEBUG] = "DEBUG",
 	[IMAGE_CFG_KAK] = "KAK",
@@ -162,6 +164,7 @@ struct image_cfg_element {
 		unsigned int nandeccmode;
 		unsigned int nandpagesz;
 		struct ext_hdr_v0_reg regdata;
+		unsigned int regdata_delay;
 		unsigned int baudrate;
 		unsigned int debug;
 		const char *key_name;
@@ -1289,8 +1292,21 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	register_set_hdr = (struct register_set_hdr_v1 *)cur;
 	for (cfgi = 0; cfgi < cfgn; cfgi++) {
 		e = &image_cfg[cfgi];
-		if (e->type != IMAGE_CFG_DATA)
+		if (e->type != IMAGE_CFG_DATA &&
+		    e->type != IMAGE_CFG_DATA_DELAY)
 			continue;
+		if (e->type == IMAGE_CFG_DATA_DELAY) {
+			size = sizeof(struct register_set_hdr_v1) + 8 * datai + 4;
+			register_set_hdr->headertype = OPT_HDR_V1_REGISTER_TYPE;
+			register_set_hdr->headersz_lsb = cpu_to_le16(size & 0xFFFF);
+			register_set_hdr->headersz_msb = size >> 16;
+			register_set_hdr->data[datai].last_entry.delay = e->regdata_delay;
+			cur += size;
+			*next_ext = 1;
+			next_ext = &register_set_hdr->data[datai].last_entry.next;
+			datai = 0;
+			continue;
+		}
 		register_set_hdr->data[datai].entry.address =
 			cpu_to_le32(e->regdata.raddr);
 		register_set_hdr->data[datai].entry.value =
@@ -1429,6 +1445,12 @@ static int image_create_config_parse_oneline(char *line,
 		el->regdata.raddr = strtoul(value1, NULL, 16);
 		el->regdata.rdata = strtoul(value2, NULL, 16);
 		break;
+	case IMAGE_CFG_DATA_DELAY:
+		if (!strcmp(value1, "SDRAM_SETUP"))
+			el->regdata_delay = REGISTER_SET_HDR_OPT_DELAY_SDRAM_SETUP;
+		else
+			el->regdata_delay = REGISTER_SET_HDR_OPT_DELAY_MS(strtoul(value1, NULL, 10));
+		break;
 	case IMAGE_CFG_BAUDRATE:
 		el->baudrate = strtoul(value1, NULL, 10);
 		break;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (17 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:50   ` Marek Behún
  2021-07-21  9:36   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed Marek Behún
                   ` (22 subsequent siblings)
  41 siblings, 2 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The mkimage host tool can be used to generate kwbimage v1 image with
secure header on host system for A38x plaform also when U-Boot is being
compiled for different platform. So there is no reason to not allow
compiling of mkimage/kwbimage with secure header support for e.g. x86-64
host.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/Makefile   |  4 ----
 tools/kwbimage.c | 22 ----------------------
 2 files changed, 26 deletions(-)

diff --git a/tools/Makefile b/tools/Makefile
index fadf3135d6..7c27069c86 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -159,10 +159,6 @@ ifneq ($(CONFIG_SYS_U_BOOT_OFFS),)
 HOSTCFLAGS_kwbimage.o += -DCONFIG_SYS_U_BOOT_OFFS=$(CONFIG_SYS_U_BOOT_OFFS)
 endif
 
-ifneq ($(CONFIG_ARMADA_38X),)
-HOSTCFLAGS_kwbimage.o += -DCONFIG_KWB_SECURE
-endif
-
 # MXSImage needs LibSSL
 ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_FIT_SIGNATURE)$(CONFIG_FIT_CIPHER),)
 HOSTCFLAGS_kwbimage.o += \
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 469e5b55f2..f3b16d94ad 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -16,7 +16,6 @@
 #include <stdint.h>
 #include "kwbimage.h"
 
-#ifdef CONFIG_KWB_SECURE
 #include <openssl/bn.h>
 #include <openssl/rsa.h>
 #include <openssl/pem.h>
@@ -42,13 +41,10 @@ void EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
 	EVP_MD_CTX_reset(ctx);
 }
 #endif
-#endif
 
 static struct image_cfg_element *image_cfg;
 static int cfgn;
-#ifdef CONFIG_KWB_SECURE
 static int verbose_mode;
-#endif
 
 struct boot_mode {
 	unsigned int id;
@@ -243,8 +239,6 @@ image_count_options(unsigned int optiontype)
 	return count;
 }
 
-#if defined(CONFIG_KWB_SECURE)
-
 static int image_get_csk_index(void)
 {
 	struct image_cfg_element *e;
@@ -267,8 +261,6 @@ static bool image_get_spezialized_img(void)
 	return e->sec_specialized_img;
 }
 
-#endif
-
 /*
  * Compute a 8-bit checksum of a memory area. This algorithm follows
  * the requirements of the Marvell SoC BootROM specifications.
@@ -363,7 +355,6 @@ static uint8_t baudrate_to_option(unsigned int baudrate)
 	}
 }
 
-#if defined(CONFIG_KWB_SECURE)
 static void kwb_msg(const char *fmt, ...)
 {
 	if (verbose_mode) {
@@ -852,8 +843,6 @@ done:
 	return ret;
 }
 
-#endif
-
 static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 			     int payloadsz)
 {
@@ -984,13 +973,11 @@ static size_t image_headersz_v1(int *hasext)
 			*hasext = 1;
 	}
 
-#if defined(CONFIG_KWB_SECURE)
 	if (image_get_csk_index() >= 0) {
 		headersz += sizeof(struct secure_hdr_v1);
 		if (hasext)
 			*hasext = 1;
 	}
-#endif
 
 #if defined(CONFIG_SYS_U_BOOT_OFFS)
 	if (headersz > CONFIG_SYS_U_BOOT_OFFS) {
@@ -1080,8 +1067,6 @@ err_close:
 	return -1;
 }
 
-#if defined(CONFIG_KWB_SECURE)
-
 int export_pub_kak_hash(RSA *kak, struct secure_hdr_v1 *secure_hdr)
 {
 	FILE *hashf;
@@ -1189,7 +1174,6 @@ int add_secure_header_v1(struct image_tool_params *params, uint8_t *ptr,
 
 	return 0;
 }
-#endif
 
 static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 			     uint8_t *ptr, int payloadsz)
@@ -1197,9 +1181,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	struct image_cfg_element *e;
 	struct main_hdr_v1 *main_hdr;
 	struct register_set_hdr_v1 *register_set_hdr;
-#if defined(CONFIG_KWB_SECURE)
 	struct secure_hdr_v1 *secure_hdr = NULL;
-#endif
 	size_t headersz;
 	uint8_t *image, *cur;
 	int hasext = 0;
@@ -1275,7 +1257,6 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	if (main_hdr->blockid == IBR_HDR_PEX_ID)
 		main_hdr->srcaddr = cpu_to_le32(0xFFFFFFFF);
 
-#if defined(CONFIG_KWB_SECURE)
 	if (image_get_csk_index() >= 0) {
 		/*
 		 * only reserve the space here; we fill the header later since
@@ -1286,7 +1267,6 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 		*next_ext = 1;
 		next_ext = &secure_hdr->next;
 	}
-#endif
 
 	datai = 0;
 	register_set_hdr = (struct register_set_hdr_v1 *)cur;
@@ -1334,11 +1314,9 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 			return NULL;
 	}
 
-#if defined(CONFIG_KWB_SECURE)
 	if (secure_hdr && add_secure_header_v1(params, ptr, payloadsz,
 					       headersz, image, secure_hdr))
 		return NULL;
-#endif
 
 	/* Calculate and set the header checksum */
 	main_hdr->checksum = image_checksum8(main_hdr, headersz);
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (18 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:38   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage Marek Behún
                   ` (21 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

These structures must have specific size without padding, so mark them as
packed via the de-facto standard macro __packed. Also replace PACKED
macro.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.h | 30 ++++++++++++++++++------------
 tools/kwboot.c   |  8 +-------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/tools/kwbimage.h b/tools/kwbimage.h
index 9f86da46e8..e063e3e41e 100644
--- a/tools/kwbimage.h
+++ b/tools/kwbimage.h
@@ -11,6 +11,12 @@
 #include <compiler.h>
 #include <stdint.h>
 
+#ifdef __GNUC__
+#define __packed __attribute((packed))
+#else
+#define __packed
+#endif
+
 #define KWBIMAGE_MAX_CONFIG	((0x1dc - 0x20)/sizeof(struct reg_config))
 #define MAX_TEMPBUF_LEN		32
 
@@ -46,12 +52,12 @@ struct main_hdr_v0 {
 	uint16_t rsvd2;			/* 0x1C-0x1D */
 	uint8_t  ext;			/* 0x1E      */
 	uint8_t  checksum;		/* 0x1F      */
-};
+} __packed;
 
 struct ext_hdr_v0_reg {
 	uint32_t raddr;
 	uint32_t rdata;
-};
+} __packed;
 
 #define EXT_HDR_V0_REG_COUNT ((0x1dc - 0x20) / sizeof(struct ext_hdr_v0_reg))
 
@@ -61,12 +67,12 @@ struct ext_hdr_v0 {
 	struct ext_hdr_v0_reg rcfg[EXT_HDR_V0_REG_COUNT];
 	uint8_t               reserved2[7];
 	uint8_t               checksum;
-};
+} __packed;
 
 struct kwb_header {
 	struct main_hdr_v0	kwb_hdr;
 	struct ext_hdr_v0	kwb_exthdr;
-};
+} __packed;
 
 /* Structure of the main header, version 1 (Armada 370/38x/XP) */
 struct main_hdr_v1 {
@@ -87,7 +93,7 @@ struct main_hdr_v1 {
 	uint16_t reserved5;             /* 0x1C-0x1D */
 	uint8_t  ext;                   /* 0x1E      */
 	uint8_t  checksum;              /* 0x1F      */
-};
+} __packed;
 
 /*
  * Main header options
@@ -109,21 +115,21 @@ struct opt_hdr_v1 {
 	uint8_t  headersz_msb;
 	uint16_t headersz_lsb;
 	char     data[0];
-};
+} __packed;
 
 /*
  * Public Key data in DER format
  */
 struct pubkey_der_v1 {
 	uint8_t key[524];
-};
+} __packed;
 
 /*
  * Signature (RSA 2048)
  */
 struct sig_v1 {
 	uint8_t sig[256];
-};
+} __packed;
 
 /*
  * Structure of secure header (Armada 38x)
@@ -146,7 +152,7 @@ struct secure_hdr_v1 {
 	uint8_t  next;			/* 0x25E0 */
 	uint8_t  reserved4;		/* 0x25E1 */
 	uint16_t reserved5;		/* 0x25E2 - 0x25E3 */
-};
+} __packed;
 
 /*
  * Structure of register set
@@ -159,14 +165,14 @@ struct register_set_hdr_v1 {
 		struct {
 			uint32_t address;	/* 0x4+8*N - 0x7+8*N */
 			uint32_t value;		/* 0x8+8*N - 0xB+8*N */
-		} entry;
+		} __packed entry;
 		struct {
 			uint8_t  next;		/* 0xC+8*N */
 			uint8_t  delay;		/* 0xD+8*N */
 			uint16_t reserved;	/* 0xE+8*N - 0xF+8*N */
-		} last_entry;
+		} __packed last_entry;
 	} data[];
-};
+} __packed;
 
 /*
  * Value 0 in register_set_hdr_v1 delay field is special.
diff --git a/tools/kwboot.c b/tools/kwboot.c
index 4be094c9c8..2683e5360c 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -26,12 +26,6 @@
 #include <sys/mman.h>
 #include <sys/stat.h>
 
-#ifdef __GNUC__
-#define PACKED __attribute((packed))
-#else
-#define PACKED
-#endif
-
 /*
  * Marvell BootROM UART Sensing
  */
@@ -68,7 +62,7 @@ struct kwboot_block {
 	uint8_t _pnum;
 	uint8_t data[128];
 	uint8_t csum;
-} PACKED;
+} __packed;
 
 #define KWBOOT_BLK_RSP_TIMEO 1000 /* ms */
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (19 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:38   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message " Marek Behún
                   ` (20 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Trying to call the following command causes NULL pointer dereference in
strlen():
  ./tools/dumpimage -T kwbimage -o /tmp/out u-boot-spl.kwb

Fix it by checking whether params->imagename is non-NULL before calling
strlen().

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index f3b16d94ad..5410df63f5 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1867,7 +1867,7 @@ static int kwbimage_generate(struct image_tool_params *params,
  */
 static int kwbimage_check_params(struct image_tool_params *params)
 {
-	if (!strlen(params->imagename)) {
+	if (!params->imagename || !strlen(params->imagename)) {
 		char *msg = "Configuration file for kwbimage creation omitted";
 
 		fprintf(stderr, "Error:%s - %s\n", params->cmdname, msg);
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message when trying to extract data from kwbimage
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (20 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:39   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 23/41] tools: kwboot: Fix wrong parameter passed to read() Marek Behún
                   ` (19 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

There is no code for extracting data from kwbimage, so show an error
message when user tries this via e.g. dumpimage call:
  ./tools/dumpimage -T kwbimage -o /tmp/out u-boot-spl.kwb

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 5410df63f5..9ecda861e4 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1867,6 +1867,11 @@ static int kwbimage_generate(struct image_tool_params *params,
  */
 static int kwbimage_check_params(struct image_tool_params *params)
 {
+	if (params->iflag) {
+		fprintf(stderr, "%s: kwbimage does not support extract operation\n", params->cmdname);
+		return CFG_INVALID;
+	}
+
 	if (!params->imagename || !strlen(params->imagename)) {
 		char *msg = "Configuration file for kwbimage creation omitted";
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 23/41] tools: kwboot: Fix wrong parameter passed to read()
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (21 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message " Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 24/41] tools: kwboot: Fix restoring terminal Marek Behún
                   ` (18 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The 'buf' variable is a pointer and '_buf' is the array itself.
Therefore we should pass sizeof(_buf) instead of sizeof(buf) to read().

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwboot.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 2683e5360c..1ba5ded5d3 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -465,7 +465,7 @@ kwboot_term_pipe(int in, int out, char *quit, int *s)
 	ssize_t nin, nout;
 	char _buf[128], *buf = _buf;
 
-	nin = read(in, buf, sizeof(buf));
+	nin = read(in, buf, sizeof(_buf));
 	if (nin <= 0)
 		return -1;
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 24/41] tools: kwboot: Fix restoring terminal
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (22 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 23/41] tools: kwboot: Fix wrong parameter passed to read() Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 25/41] tools: kwboot: Print trailing newline after terminal is terminated Marek Behún
                   ` (17 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Call tcsetattr() only if the file descriptor is valid. It may be
invalidated by previous lines (if it is not a tty descriptor).

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwboot.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 1ba5ded5d3..7fa742d84c 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -558,7 +558,8 @@ kwboot_terminal(int tty)
 		}
 	} while (quit[s] != 0);
 
-	tcsetattr(in, TCSANOW, &otio);
+	if (in >= 0)
+		tcsetattr(in, TCSANOW, &otio);
 out:
 	return rc;
 }
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 25/41] tools: kwboot: Print trailing newline after terminal is terminated
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (23 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 24/41] tools: kwboot: Fix restoring terminal Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 26/41] tools: kwboot: Cosmetic fix - add missing curly brackets Marek Behún
                   ` (16 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Print trailing newline as the last printed byte can be something
different.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwboot.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 7fa742d84c..941f4228f9 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -560,6 +560,7 @@ kwboot_terminal(int tty)
 
 	if (in >= 0)
 		tcsetattr(in, TCSANOW, &otio);
+	printf("\n");
 out:
 	return rc;
 }
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 26/41] tools: kwboot: Cosmetic fix - add missing curly brackets
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (24 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 25/41] tools: kwboot: Print trailing newline after terminal is terminated Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 27/41] tools: kwboot: Check for v1 header size Marek Behún
                   ` (15 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Add missing curly brackets for this else statement.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwboot.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 941f4228f9..c0ac4ce19e 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -479,13 +479,14 @@ kwboot_term_pipe(int in, int out, char *quit, int *s)
 					return 0;
 				buf++;
 				nin--;
-			} else
+			} else {
 				while (*s > 0) {
 					nout = write(out, quit, *s);
 					if (nout <= 0)
 						return -1;
 					(*s) -= nout;
 				}
+			}
 		}
 	}
 
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 27/41] tools: kwboot: Check for v1 header size
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (25 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 26/41] tools: kwboot: Cosmetic fix - add missing curly brackets Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version Marek Behún
                   ` (14 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Too small invalid headers may cause kwboot to crash.
Check for header size of v1 images.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 tools/kwboot.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index c0ac4ce19e..1d32c1b7ad 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -645,6 +645,11 @@ kwboot_img_patch_hdr(void *img, size_t size)
 	else
 		hdrsz = KWBHEADER_V1_SIZE(hdr);
 
+	if (size < hdrsz) {
+		errno = EINVAL;
+		goto out;
+	}
+
 	csum = kwboot_img_csum8(hdr, hdrsz) - hdr->checksum;
 	if (csum != hdr->checksum) {
 		errno = EINVAL;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (26 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 27/41] tools: kwboot: Check for v1 header size Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21  9:40   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 29/41] arm: mvebu: Fix return_to_bootrom() Marek Behún
                   ` (13 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Function image_version() returns unsigned value, so it can never be
negative. Explicitly check for two supported image versions: v0 and v1.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwboot.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 1d32c1b7ad..7feeaa45a2 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -634,7 +634,7 @@ kwboot_img_patch_hdr(void *img, size_t size)
 	}
 
 	image_ver = image_version(img);
-	if (image_ver < 0) {
+	if (image_ver != 0 && image_ver != 1) {
 		fprintf(stderr, "Invalid image header version\n");
 		errno = EINVAL;
 		goto out;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 29/41] arm: mvebu: Fix return_to_bootrom()
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (27 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 30/41] arm: mvebu: Mark return_to_bootrom() as a noreturn function Marek Behún
                   ` (12 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Register r0 should be set to return value 0x0 - NO_ERR.

Set r0 with return value after all registers are restored from the
stack, so that the return value is always correct.

Signed-off-by: Pali Rohár <pali@kernel.org>
Fixes: 944c7a317675 ("arm: mvebu: Add option to use UART xmodem protocol via kwboot")
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 arch/arm/mach-mvebu/lowlevel_spl.S | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-mvebu/lowlevel_spl.S b/arch/arm/mach-mvebu/lowlevel_spl.S
index 8718d7a43e..dde77b7652 100644
--- a/arch/arm/mach-mvebu/lowlevel_spl.S
+++ b/arch/arm/mach-mvebu/lowlevel_spl.S
@@ -13,8 +13,9 @@ ENDPROC(save_boot_params)
 ENTRY(return_to_bootrom)
 	ldr	r12, =CONFIG_SPL_BOOTROM_SAVE
 	ldr	sp, [r12]
+	ldmfd	sp!, {r0 - r12, lr}	/* @ restore registers from stack */
 	mov	r0, #0x0		/* @ return value: 0x0 NO_ERR */
-	ldmfd	sp!, {r0 - r12, pc}	/* @ restore regs and return */
+	bx	lr			/* @ return to bootrom */
 ENDPROC(return_to_bootrom)
 
 /*
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 30/41] arm: mvebu: Mark return_to_bootrom() as a noreturn function
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (28 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 29/41] arm: mvebu: Fix return_to_bootrom() Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 31/41] arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework Marek Behún
                   ` (11 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

This function does not return, so add the appropriate compiler flag.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 arch/arm/mach-mvebu/include/mach/cpu.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mach-mvebu/include/mach/cpu.h b/arch/arm/mach-mvebu/include/mach/cpu.h
index 52473ade7a..79858858c2 100644
--- a/arch/arm/mach-mvebu/include/mach/cpu.h
+++ b/arch/arm/mach-mvebu/include/mach/cpu.h
@@ -142,7 +142,7 @@ int mvebu_mbus_probe(struct mbus_win windows[], int count);
 int mvebu_soc_family(void);
 u32 mvebu_get_nand_clock(void);
 
-void return_to_bootrom(void);
+void __noreturn return_to_bootrom(void);
 
 #ifndef CONFIG_DM_MMC
 int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks);
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 31/41] arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (29 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 30/41] arm: mvebu: Mark return_to_bootrom() as a noreturn function Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 32/41] arm: mvebu: Use U-Boot's SPL BootROM framework for booting from NAND/UART Marek Behún
                   ` (10 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

U-Boot's SPL framework already has an API for loading U-Boot via
BootROM.

Implement the function board_return_to_bootrom() for mvebu SPL code.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 arch/arm/mach-mvebu/Kconfig |  4 ++++
 arch/arm/mach-mvebu/spl.c   | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index cda65f7478..2133d9a172 100644
--- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig
@@ -257,6 +257,7 @@ config MVEBU_SPL_BOOT_DEVICE_SPI
 	select SPL_SPI_FLASH_SUPPORT
 	select SPL_SPI_LOAD
 	select SPL_SPI_SUPPORT
+	select SPL_BOOTROM_SUPPORT
 
 config MVEBU_SPL_BOOT_DEVICE_MMC
 	bool "SDIO/MMC card"
@@ -267,14 +268,17 @@ config MVEBU_SPL_BOOT_DEVICE_MMC
 	select SPL_GPIO_SUPPORT
 	select SPL_LIBDISK_SUPPORT
 	select SPL_MMC_SUPPORT
+	select SPL_BOOTROM_SUPPORT
 
 config MVEBU_SPL_BOOT_DEVICE_SATA
 	bool "SATA"
 	select SPL_SATA_SUPPORT
 	select SPL_LIBDISK_SUPPORT
+	select SPL_BOOTROM_SUPPORT
 
 config MVEBU_SPL_BOOT_DEVICE_UART
 	bool "UART"
+	select SPL_BOOTROM_SUPPORT
 
 endchoice
 
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 16ebb7a59e..836eb18889 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -79,6 +79,18 @@ u32 spl_boot_device(void)
 	return get_boot_device();
 }
 
+int board_return_to_bootrom(struct spl_image_info *spl_image,
+			    struct spl_boot_device *bootdev)
+{
+	u32 *regs = *(u32 **)CONFIG_SPL_BOOTROM_SAVE;
+
+	printf("Returning to BootROM (return address 0x%08x)...\n", regs[13]);
+	return_to_bootrom();
+
+	/* NOTREACHED - return_to_bootrom() does not return */
+	hang();
+}
+
 void board_init_f(ulong dummy)
 {
 	int ret;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 32/41] arm: mvebu: Use U-Boot's SPL BootROM framework for booting from NAND/UART
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (30 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 31/41] arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image Marek Behún
                   ` (9 subsequent siblings)
  41 siblings, 0 replies; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Current code uses hack in board_init_f() which calls return_to_bootrom()
to skip U-Boot SPL code and return back to BootROM to load U-Boot via
UART or from NAND.

This change migrates that hack from the board_init_f() function and
changes it to return BOOT_DEVICE_BOOTROM instead of returning to BootROM
directly, so that U-Boot's SPL framework is used for returning to
BootROM.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
---
 arch/arm/mach-mvebu/spl.c | 47 ++++++++++++++++++++-------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 836eb18889..5c3d959bff 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -76,7 +76,30 @@ static u32 get_boot_device(void)
 
 u32 spl_boot_device(void)
 {
-	return get_boot_device();
+	u32 boot_device = get_boot_device();
+
+	/*
+	 * Return to the BootROM to continue the Marvell xmodem
+	 * UART boot protocol. As initiated by the kwboot tool.
+	 *
+	 * This can only be done by the BootROM since the beginning
+	 * of the image is already read and interpreted by the BootROM.
+	 * SPL has no chance to receive this information. So we
+	 * need to return to the BootROM to enable this xmodem
+	 * UART download. Use SPL infrastructure to return to BootROM.
+	 *
+	 * If booting from NAND lets let the BootROM load the
+	 * rest of the bootloader.
+	 */
+	switch (boot_device) {
+	case BOOT_DEVICE_UART:
+#if defined(CONFIG_ARMADA_38X)
+	case BOOT_DEVICE_NAND:
+#endif
+		return BOOT_DEVICE_BOOTROM;
+	default:
+		return boot_device;
+	}
 }
 
 int board_return_to_bootrom(struct spl_image_info *spl_image,
@@ -147,26 +170,4 @@ void board_init_f(ulong dummy)
 
 	/* Update read timing control for PCIe */
 	mv_rtc_config();
-
-	/*
-	 * Return to the BootROM to continue the Marvell xmodem
-	 * UART boot protocol. As initiated by the kwboot tool.
-	 *
-	 * This can only be done by the BootROM and not by the
-	 * U-Boot SPL infrastructure, since the beginning of the
-	 * image is already read and interpreted by the BootROM.
-	 * SPL has no chance to receive this information. So we
-	 * need to return to the BootROM to enable this xmodem
-	 * UART download.
-	 *
-	 * If booting from NAND lets let the BootROM load the
-	 * rest of the bootloader.
-	 */
-	switch (get_boot_device()) {
-		case BOOT_DEVICE_UART:
-#if defined(CONFIG_ARMADA_38X)
-		case BOOT_DEVICE_NAND:
-#endif
-			return_to_bootrom();
-	}
 }
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (31 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 32/41] arm: mvebu: Use U-Boot's SPL BootROM framework for booting from NAND/UART Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-21 10:29   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types Marek Behún
                   ` (8 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Some image types (e.g. kwbimage v1) store the offset to SPL binary and
offset to main U-Boot binary in their headers. To avoid reading SPL
binary when loading main U-Boot, add support for specifying offset in
struct spl_image_info, which defines the offset from the beginning of
the header and the beginning of the executable data.

Initial support is added only for SPI, MMC and SATA code. We can extend
it later if needed.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 common/spl/spl_mmc.c  | 16 +++++++++++++++-
 common/spl/spl_sata.c | 12 +++++++++++-
 common/spl/spl_spi.c  |  2 +-
 include/spl.h         |  1 +
 4 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index add2785b4e..5605f1820d 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -20,26 +20,40 @@
 static int mmc_load_legacy(struct spl_image_info *spl_image, struct mmc *mmc,
 			   ulong sector, struct image_header *header)
 {
+	u32 image_offset_sectors;
 	u32 image_size_sectors;
 	unsigned long count;
+	u32 image_offset;
 	int ret;
 
 	ret = spl_parse_image_header(spl_image, header);
 	if (ret)
 		return ret;
 
+	/* convert offset to sectors - round down */
+	image_offset_sectors = spl_image->offset / mmc->read_bl_len;
+	/* calculate remaining offset */
+	image_offset = spl_image->offset % mmc->read_bl_len;
+
 	/* convert size to sectors - round up */
 	image_size_sectors = (spl_image->size + mmc->read_bl_len - 1) /
 			     mmc->read_bl_len;
 
 	/* Read the header too to avoid extra memcpy */
-	count = blk_dread(mmc_get_blk_desc(mmc), sector, image_size_sectors,
+	count = blk_dread(mmc_get_blk_desc(mmc),
+			  sector + image_offset_sectors,
+			  image_size_sectors,
 			  (void *)(ulong)spl_image->load_addr);
 	debug("read %x sectors to %lx\n", image_size_sectors,
 	      spl_image->load_addr);
 	if (count != image_size_sectors)
 		return -EIO;
 
+	if (image_offset)
+		memmove((void *)(ulong)spl_image->load_addr,
+			(void *)(ulong)spl_image->load_addr + image_offset,
+			spl_image->size);
+
 	return 0;
 }
 
diff --git a/common/spl/spl_sata.c b/common/spl/spl_sata.c
index e108af0576..535a9219ef 100644
--- a/common/spl/spl_sata.c
+++ b/common/spl/spl_sata.c
@@ -36,6 +36,8 @@ static int spl_sata_load_image_raw(struct spl_image_info *spl_image,
 	struct image_header *header;
 	unsigned long count;
 	u32 image_size_sectors;
+	u32 image_offset_sectors;
+	u32 image_offset;
 	int ret;
 
 	header = spl_get_load_buffer(-sizeof(*header), stor_dev->blksz);
@@ -48,11 +50,19 @@ static int spl_sata_load_image_raw(struct spl_image_info *spl_image,
 		return ret;
 
 	image_size_sectors = DIV_ROUND_UP(spl_image->size, stor_dev->blksz);
-	count = blk_dread(stor_dev, sector, image_size_sectors,
+	image_offset_sectors = spl_image->offset / stor_dev->blksz;
+	image_offset = spl_image->offset % stor_dev->blksz;
+	count = blk_dread(stor_dev, sector + image_offset_sectors,
+			image_size_sectors,
 			(void *)spl_image->load_addr);
 	if (count != image_size_sectors)
 		return -EIO;
 
+	if (image_offset)
+		memmove((void *)spl_image->load_addr,
+			(void *)spl_image->load_addr + image_offset,
+			spl_image->size);
+
 	return 0;
 }
 
diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c
index 6a4e033287..9884e7c185 100644
--- a/common/spl/spl_spi.c
+++ b/common/spl/spl_spi.c
@@ -159,7 +159,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
 			err = spl_parse_image_header(spl_image, header);
 			if (err)
 				return err;
-			err = spi_flash_read(flash, payload_offs,
+			err = spi_flash_read(flash, payload_offs + spl_image->offset,
 					     spl_image->size,
 					     (void *)spl_image->load_addr);
 		}
diff --git a/include/spl.h b/include/spl.h
index cee9a42ddb..3df923a813 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -198,6 +198,7 @@ struct spl_image_info {
 	void *fdt_addr;
 #endif
 	u32 boot_device;
+	u32 offset;
 	u32 size;
 	u32 flags;
 	void *arg;
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (32 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-22  8:50   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header Marek Behún
                   ` (7 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Platform specific BootROM may use its own image type for loading SPL or
main U-Boot binary. In some cases it makes sense to not use BootROM
supplied code for booting main U-Boot binary but rather to use U-Boot SPL
to load main U-Boot binary, e.g. when U-Boot SPL can load main U-Boot
binary faster than BootROM. In this case it is required for platform board
code to parse and load U-Boot in BootROM specific image type.

This change adds support for parsing platform / board / BootROM specific
image types via weak function spl_parse_board_header() which is called
before marking boot image as a raw.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 common/spl/spl.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/common/spl/spl.c b/common/spl/spl.c
index eba77cace6..555045eaf2 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -296,6 +296,12 @@ static int spl_load_fit_image(struct spl_image_info *spl_image,
 }
 #endif
 
+__weak int spl_parse_board_header(struct spl_image_info *spl_image,
+				  const void *image_header, size_t size)
+{
+	return -EINVAL;
+}
+
 __weak int spl_parse_legacy_header(struct spl_image_info *spl_image,
 				   const struct image_header *header)
 {
@@ -348,6 +354,9 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
 		}
 #endif
 
+		if (!spl_parse_board_header(spl_image, (const void *)header, sizeof(*header)))
+			return 0;
+
 #ifdef CONFIG_SPL_RAW_IMAGE_SUPPORT
 		/* Signature not found - assume u-boot.bin */
 		debug("mkimage signature not found - ih_magic = %x\n",
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (33 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-22  8:51   ` Stefan Roese
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files Marek Behún
                   ` (6 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Now that proper load and execution addresses are set in v1 kwbimage we
can use it for loading and booting main U-Boot binary.

Use the new spl_parse_board_header() function to implement parsing the
kwbimage v1 header. Use information from this header to locate offset and
size of the main U-Boot binary, instead of using the legacy U-Boot header
which is prepended to the main U-Boot binary stored at fixed offset. This
has the advantage that we do not need to relay on legacy U-Boot header
anymore and therefore main U-Boot binary can be stored at any offset, as
is the case when loading & booting main U-Boot binary by BootROM.
The CONFIG_SYS_U_BOOT_OFFS option is therefore not used by SPL code
anymore.

Also allow to compile U-Boot SPL without CONFIG_SPL_SPI_FLASH_SUPPORT,
CONFIG_SPL_MMC_SUPPORT or CONFIG_SPL_SATA_SUPPORT set. In this case
BootROM is used for loading and executing main U-Boot binary. This
reduces the size of U-Boot's SPL image. By default these config options
are enabled and so BootROM loading is not used. In some cases BootROM
reads from SPI NOR at lower speed than U-Boot SPL. So people can decide
whether they want to have smaller SPL binary at the cost of slower boot.

Therefore dependency on CONFIG_SPL_DM_SPI, CONFIG_SPL_SPI_FLASH_SUPPORT,
CONFIG_SPL_SPI_LOAD, CONFIG_SPL_SPI_SUPPORT, CONFIG_SPL_DM_GPIO,
CONFIG_SPL_DM_MMC, CONFIG_SPL_GPIO_SUPPORT, CONFIG_SPL_LIBDISK_SUPPORT,
CONFIG_SPL_MMC_SUPPORT, CONFIG_SPL_SATA_SUPPORT and
CONFIG_SPL_LIBDISK_SUPPORT is changed from strict to related "imply"
(which can be selectivelly turned off and causes booting via BootROM).

Options CONFIG_SYS_SPI_U_BOOT_OFFS,
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR and
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET have to to be set to
zero as they define the location where kwbimage header starts. It is the
location where BootROM expects start of the kwbimage from which it reads,
parses and executes SPL part. The same applies to option
CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR, which has to be set to one.

Update all config files to set correct values of these options and set
CONFIG_SYS_U_BOOT_OFFS to the correct value - the offset where main
U-Boot binary starts.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 arch/arm/mach-mvebu/Kconfig         |  22 +--
 arch/arm/mach-mvebu/spl.c           | 205 ++++++++++++++++++++++++++--
 board/kobol/helios4/Kconfig         |   5 -
 board/solidrun/clearfog/Kconfig     |   5 -
 common/spl/Kconfig                  |   4 +-
 configs/clearfog_defconfig          |   1 -
 configs/controlcenterdc_defconfig   |   1 -
 configs/db-88f6720_defconfig        |   1 -
 configs/db-88f6820-amc_defconfig    |   1 -
 configs/db-88f6820-gp_defconfig     |   2 -
 configs/db-mv784mp-gp_defconfig     |   1 -
 configs/ds414_defconfig             |   1 -
 configs/helios4_defconfig           |   1 -
 configs/maxbcm_defconfig            |   1 -
 configs/theadorable_debug_defconfig |   1 -
 configs/turris_omnia_defconfig      |   1 -
 configs/x530_defconfig              |   1 -
 include/configs/clearfog.h          |   5 +-
 include/configs/controlcenterdc.h   |   7 +-
 include/configs/db-88f6720.h        |   2 +-
 include/configs/db-88f6820-amc.h    |   2 +-
 include/configs/db-88f6820-gp.h     |   5 +-
 include/configs/db-mv784mp-gp.h     |   2 +-
 include/configs/ds414.h             |   2 +-
 include/configs/helios4.h           |   5 +-
 include/configs/theadorable.h       |   2 +-
 include/configs/turris_omnia.h      |   5 +-
 include/configs/x530.h              |   2 +-
 28 files changed, 224 insertions(+), 69 deletions(-)

diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 2133d9a172..140c4199a2 100644
--- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig
@@ -253,27 +253,27 @@ choice
 config MVEBU_SPL_BOOT_DEVICE_SPI
 	bool "SPI NOR flash"
 	imply ENV_IS_IN_SPI_FLASH
-	select SPL_DM_SPI
-	select SPL_SPI_FLASH_SUPPORT
-	select SPL_SPI_LOAD
-	select SPL_SPI_SUPPORT
+	imply SPL_DM_SPI
+	imply SPL_SPI_FLASH_SUPPORT
+	imply SPL_SPI_LOAD
+	imply SPL_SPI_SUPPORT
 	select SPL_BOOTROM_SUPPORT
 
 config MVEBU_SPL_BOOT_DEVICE_MMC
 	bool "SDIO/MMC card"
 	imply ENV_IS_IN_MMC
 	# GPIO needed for eMMC/SD card presence detection
-	select SPL_DM_GPIO
-	select SPL_DM_MMC
-	select SPL_GPIO_SUPPORT
-	select SPL_LIBDISK_SUPPORT
-	select SPL_MMC_SUPPORT
+	imply SPL_DM_GPIO
+	imply SPL_DM_MMC
+	imply SPL_GPIO_SUPPORT
+	imply SPL_LIBDISK_SUPPORT
+	imply SPL_MMC_SUPPORT
 	select SPL_BOOTROM_SUPPORT
 
 config MVEBU_SPL_BOOT_DEVICE_SATA
 	bool "SATA"
-	select SPL_SATA_SUPPORT
-	select SPL_LIBDISK_SUPPORT
+	imply SPL_SATA_SUPPORT
+	imply SPL_LIBDISK_SUPPORT
 	select SPL_BOOTROM_SUPPORT
 
 config MVEBU_SPL_BOOT_DEVICE_UART
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 5c3d959bff..c2606bc8fb 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -8,6 +8,7 @@
 #include <debug_uart.h>
 #include <fdtdec.h>
 #include <hang.h>
+#include <image.h>
 #include <init.h>
 #include <log.h>
 #include <spl.h>
@@ -16,6 +17,160 @@
 #include <asm/arch/cpu.h>
 #include <asm/arch/soc.h>
 
+#if defined(CONFIG_SPL_SPI_FLASH_SUPPORT) || defined(CONFIG_SPL_MMC_SUPPORT) || defined(CONFIG_SPL_SATA_SUPPORT)
+
+/*
+ * When loading U-Boot via SPL from SPI NOR, CONFIG_SYS_SPI_U_BOOT_OFFS must
+ * point to the offset of kwbimage main header which is always at offset zero
+ * (defined by BootROM). Therefore other values of CONFIG_SYS_SPI_U_BOOT_OFFS
+ * makes U-Boot non-bootable.
+ */
+#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
+#if defined(CONFIG_SYS_SPI_U_BOOT_OFFS) && CONFIG_SYS_SPI_U_BOOT_OFFS != 0
+#error CONFIG_SYS_SPI_U_BOOT_OFFS must be set to 0
+#endif
+#endif
+
+/*
+ * When loading U-Boot via SPL from eMMC (in Marvell terminology SDIO), the
+ * kwbimage main header is stored at sector 0. U-Boot SPL needs to parse this
+ * header and figure out at which sector the main U-Boot binary is stored.
+ * Partition booting is therefore not supported and CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
+ * and CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET need to point to the
+ * kwbimage main header.
+ */
+#ifdef CONFIG_SPL_MMC_SUPPORT
+#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
+#error CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION is unsupported
+#endif
+#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR) && CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR != 0
+#error CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR must be set to 0
+#endif
+#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET) && CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET != 0
+#error CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET must be set to 0
+#endif
+#endif
+
+/*
+ * When loading U-Boot via SPL from SATA disk, the kwbimage main header is
+ * stored at sector 1. Therefore CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR must be
+ * set to 1. Otherwise U-Boot SPL would not be able to load main U-Boot binary.
+ */
+#ifdef CONFIG_SPL_SATA_SUPPORT
+#if !defined(CONFIG_SPL_SATA_RAW_U_BOOT_USE_SECTOR) || !defined(CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR) || CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR != 1
+#error CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR must be set to 1
+#endif
+#endif
+
+/* Boot Type - block ID */
+#define IBR_HDR_I2C_ID			0x4D
+#define IBR_HDR_SPI_ID			0x5A
+#define IBR_HDR_NAND_ID			0x8B
+#define IBR_HDR_SATA_ID			0x78
+#define IBR_HDR_PEX_ID			0x9C
+#define IBR_HDR_UART_ID			0x69
+#define IBR_HDR_SDIO_ID			0xAE
+
+/* Structure of the main header, version 1 (Armada 370/38x/XP) */
+struct kwbimage_main_hdr_v1 {
+	uint8_t  blockid;               /* 0x0       */
+	uint8_t  flags;                 /* 0x1       */
+	uint16_t reserved2;             /* 0x2-0x3   */
+	uint32_t blocksize;             /* 0x4-0x7   */
+	uint8_t  version;               /* 0x8       */
+	uint8_t  headersz_msb;          /* 0x9       */
+	uint16_t headersz_lsb;          /* 0xA-0xB   */
+	uint32_t srcaddr;               /* 0xC-0xF   */
+	uint32_t destaddr;              /* 0x10-0x13 */
+	uint32_t execaddr;              /* 0x14-0x17 */
+	uint8_t  options;               /* 0x18      */
+	uint8_t  nandblocksize;         /* 0x19      */
+	uint8_t  nandbadblklocation;    /* 0x1A      */
+	uint8_t  reserved4;             /* 0x1B      */
+	uint16_t reserved5;             /* 0x1C-0x1D */
+	uint8_t  ext;                   /* 0x1E      */
+	uint8_t  checksum;              /* 0x1F      */
+} __packed;
+
+#ifdef CONFIG_SPL_MMC_SUPPORT
+u32 spl_mmc_boot_mode(const u32 boot_device)
+{
+	return MMCSD_MODE_RAW;
+}
+#endif
+
+int spl_parse_board_header(struct spl_image_info *spl_image,
+			   const void *image_header, size_t size)
+{
+	const struct kwbimage_main_hdr_v1 *mhdr = image_header;
+
+	if (size < sizeof(*mhdr)) {
+		/* This should be compile time assert */
+		printf("FATAL ERROR: Image header size is too small\n");
+		hang();
+	}
+
+	/*
+	 * Very basic check for image validity. We cannot check mhdr->checksum
+	 * as it is calculated also from variable length extended headers
+	 * (including SPL content) which is not included in U-Boot image_header.
+	 */
+	if (mhdr->version != 1 ||
+	    ((mhdr->headersz_msb << 16) | mhdr->headersz_lsb) < sizeof(*mhdr) ||
+	    (
+#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
+	     mhdr->blockid != IBR_HDR_SPI_ID &&
+#endif
+#ifdef CONFIG_SPL_SATA_SUPPORT
+	     mhdr->blockid != IBR_HDR_SATA_ID &&
+#endif
+#ifdef CONFIG_SPL_MMC_SUPPORT
+	     mhdr->blockid != IBR_HDR_SDIO_ID &&
+#endif
+	     1
+	    )) {
+		printf("ERROR: Not valid SPI/NAND/SATA/SDIO kwbimage v1\n");
+		return -EINVAL;
+	}
+
+	spl_image->offset = mhdr->srcaddr;
+
+#ifdef CONFIG_SPL_SATA_SUPPORT
+	/*
+	 * For SATA srcaddr is specified in number of sectors.
+	 * The main header is must be stored at sector number 1.
+	 * This expects that sector size is 512 bytes and recalculates
+	 * data offset to bytes relative to the main header.
+	 */
+	if (mhdr->blockid == IBR_HDR_SATA_ID) {
+		if (spl_image->offset < 1) {
+			printf("ERROR: Wrong SATA srcaddr in kwbimage\n");
+			return -EINVAL;
+		}
+		spl_image->offset -= 1;
+		spl_image->offset *= 512;
+	}
+#endif
+
+#ifdef CONFIG_SPL_MMC_SUPPORT
+	/*
+	 * For SDIO (eMMC) srcaddr is specified in number of sectors.
+	 * This expects that sector size is 512 bytes and recalculates
+	 * data offset to bytes.
+	 */
+	if (mhdr->blockid == IBR_HDR_SDIO_ID)
+		spl_image->offset *= 512;
+#endif
+
+	spl_image->size = mhdr->blocksize;
+	spl_image->entry_point = mhdr->execaddr;
+	spl_image->load_addr = mhdr->destaddr;
+	spl_image->os = IH_OS_U_BOOT;
+	spl_image->name = "U-Boot";
+
+	return 0;
+}
+
 static u32 get_boot_device(void)
 {
 	u32 val;
@@ -49,11 +204,11 @@ static u32 get_boot_device(void)
 	boot_device = (val & BOOT_DEV_SEL_MASK) >> BOOT_DEV_SEL_OFFS;
 	debug("SAR_REG=0x%08x boot_device=0x%x\n", val, boot_device);
 	switch (boot_device) {
-#if defined(CONFIG_ARMADA_38X)
+#ifdef BOOT_FROM_NAND
 	case BOOT_FROM_NAND:
 		return BOOT_DEVICE_NAND;
 #endif
-#ifdef CONFIG_SPL_MMC_SUPPORT
+#ifdef BOOT_FROM_MMC
 	case BOOT_FROM_MMC:
 	case BOOT_FROM_MMC_ALT:
 		return BOOT_DEVICE_MMC1;
@@ -69,15 +224,26 @@ static u32 get_boot_device(void)
 		return BOOT_DEVICE_SATA;
 #endif
 	case BOOT_FROM_SPI:
-	default:
 		return BOOT_DEVICE_SPI;
+	default:
+		return BOOT_DEVICE_BOOTROM;
 	};
 }
 
+#else
+
+static u32 get_boot_device(void)
+{
+	return BOOT_DEVICE_BOOTROM;
+}
+
+#endif
+
 u32 spl_boot_device(void)
 {
 	u32 boot_device = get_boot_device();
 
+	switch (boot_device) {
 	/*
 	 * Return to the BootROM to continue the Marvell xmodem
 	 * UART boot protocol. As initiated by the kwboot tool.
@@ -87,18 +253,35 @@ u32 spl_boot_device(void)
 	 * SPL has no chance to receive this information. So we
 	 * need to return to the BootROM to enable this xmodem
 	 * UART download. Use SPL infrastructure to return to BootROM.
-	 *
-	 * If booting from NAND lets let the BootROM load the
-	 * rest of the bootloader.
 	 */
-	switch (boot_device) {
 	case BOOT_DEVICE_UART:
-#if defined(CONFIG_ARMADA_38X)
-	case BOOT_DEVICE_NAND:
-#endif
 		return BOOT_DEVICE_BOOTROM;
+
+	/*
+	 * If SPL is compiled with chosen boot_device support
+	 * then use SPL driver for loading main U-Boot binary.
+	 */
+#ifdef CONFIG_SPL_MMC_SUPPORT
+	case BOOT_DEVICE_MMC1:
+		return BOOT_DEVICE_MMC1;
+#endif
+#ifdef CONFIG_SPL_SATA_SUPPORT
+	case BOOT_FROM_SATA:
+		return BOOT_FROM_SATA;
+#endif
+#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
+	case BOOT_DEVICE_SPI:
+		return BOOT_DEVICE_SPI;
+#endif
+
+	/*
+	 * If SPL is not compiled with chosen boot_device support
+	 * then return to the BootROM. BootROM supports loading
+	 * main U-Boot binary from any valid boot_device present
+	 * in SAR register.
+	 */
 	default:
-		return boot_device;
+		return BOOT_DEVICE_BOOTROM;
 	}
 }
 
diff --git a/board/kobol/helios4/Kconfig b/board/kobol/helios4/Kconfig
index cad51c1cf0..81a2199ae5 100644
--- a/board/kobol/helios4/Kconfig
+++ b/board/kobol/helios4/Kconfig
@@ -16,9 +16,4 @@ config ENV_SECT_SIZE
 	# Use optimistic 64 KiB erase block, will vary between actual media
 	default 0x10000 if MVEBU_SPL_BOOT_DEVICE_MMC || MVEBU_SPL_BOOT_DEVICE_UART
 
-config SYS_SPI_U_BOOT_OFFS
-	hex "address of u-boot payload in SPI flash"
-	default 0x20000
-	depends on MVEBU_SPL_BOOT_DEVICE_SPI
-
 endmenu
diff --git a/board/solidrun/clearfog/Kconfig b/board/solidrun/clearfog/Kconfig
index cf95258090..60d3921307 100644
--- a/board/solidrun/clearfog/Kconfig
+++ b/board/solidrun/clearfog/Kconfig
@@ -54,9 +54,4 @@ config ENV_SECT_SIZE
 	# Use optimistic 64 KiB erase block, will vary between actual media
 	default 0x10000 if MVEBU_SPL_BOOT_DEVICE_MMC || MVEBU_SPL_BOOT_DEVICE_UART
 
-config SYS_SPI_U_BOOT_OFFS
-	hex "address of u-boot payload in SPI flash"
-	default 0x20000
-	depends on MVEBU_SPL_BOOT_DEVICE_SPI
-
 endmenu
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index fa80524cfb..a710c8d86c 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -334,7 +334,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
 	default 0x75 if ARCH_DAVINCI
 	default 0x8a if ARCH_MX6 || ARCH_MX7
 	default 0x100 if ARCH_UNIPHIER
-	default 0x140 if ARCH_MVEBU
+	default 0x0 if ARCH_MVEBU
 	default 0x200 if ARCH_SOCFPGA || ARCH_AT91
 	default 0x300 if ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || OMAP44XX || \
 		         OMAP54XX || AM33XX || AM43XX || ARCH_K3
@@ -1089,6 +1089,7 @@ config SPL_SATA_SUPPORT
 config SPL_SATA_RAW_U_BOOT_USE_SECTOR
 	bool "SATA raw mode: by sector"
 	depends on SPL_SATA_SUPPORT
+	default y if ARCH_MVEBU
 	help
 	  Use sector number for specifying U-Boot location on SATA disk in
 	  raw mode.
@@ -1096,6 +1097,7 @@ config SPL_SATA_RAW_U_BOOT_USE_SECTOR
 config SPL_SATA_RAW_U_BOOT_SECTOR
 	hex "Sector on the SATA disk to load U-Boot from"
 	depends on SPL_SATA_RAW_U_BOOT_USE_SECTOR
+	default 0x1 if ARCH_MVEBU
 	help
 	  Sector on the SATA disk to load U-Boot from, when the SATA disk is being
 	  used in raw mode. Units: SATA disk sectors (1 sector = 512 bytes).
diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig
index 4702cf2df1..4ece79fe7e 100644
--- a/configs/clearfog_defconfig
+++ b/configs/clearfog_defconfig
@@ -24,7 +24,6 @@ CONFIG_USE_PREBOOT=y
 CONFIG_SYS_CONSOLE_INFO_QUIET=y
 # CONFIG_DISPLAY_BOARDINFO is not set
 CONFIG_DISPLAY_BOARDINFO_LATE=y
-CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET=0x1
 CONFIG_SPL_I2C_SUPPORT=y
 CONFIG_CMD_TLV_EEPROM=y
 CONFIG_SPL_CMD_TLV_EEPROM=y
diff --git a/configs/controlcenterdc_defconfig b/configs/controlcenterdc_defconfig
index a8d961a7c5..eccc1d7dfc 100644
--- a/configs/controlcenterdc_defconfig
+++ b/configs/controlcenterdc_defconfig
@@ -9,7 +9,6 @@ CONFIG_TARGET_CONTROLCENTERDC=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x40000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x30000
 CONFIG_DM_GPIO=y
 CONFIG_DEFAULT_DEVICE_TREE="armada-38x-controlcenterdc"
 CONFIG_SPL_TEXT_BASE=0x40000030
diff --git a/configs/db-88f6720_defconfig b/configs/db-88f6720_defconfig
index bb73635d92..479a110252 100644
--- a/configs/db-88f6720_defconfig
+++ b/configs/db-88f6720_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_DB_88F6720=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x10000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
 CONFIG_DEFAULT_DEVICE_TREE="armada-375-db"
 CONFIG_SPL_TEXT_BASE=0x40004030
 CONFIG_SPL_SERIAL_SUPPORT=y
diff --git a/configs/db-88f6820-amc_defconfig b/configs/db-88f6820-amc_defconfig
index a7c8498599..7cc838a148 100644
--- a/configs/db-88f6820-amc_defconfig
+++ b/configs/db-88f6820-amc_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_DB_88F6820_AMC=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x40000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
 CONFIG_DEFAULT_DEVICE_TREE="armada-385-db-88f6820-amc"
 CONFIG_SPL_TEXT_BASE=0x40000030
 CONFIG_SPL_SERIAL_SUPPORT=y
diff --git a/configs/db-88f6820-gp_defconfig b/configs/db-88f6820-gp_defconfig
index 6fa00d1a17..cdc6cabaf6 100644
--- a/configs/db-88f6820-gp_defconfig
+++ b/configs/db-88f6820-gp_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_DB_88F6820_GP=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x40000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
 CONFIG_DEFAULT_DEVICE_TREE="armada-388-gp"
 CONFIG_SPL_TEXT_BASE=0x40000030
 CONFIG_SPL_SERIAL_SUPPORT=y
@@ -24,7 +23,6 @@ CONFIG_USE_PREBOOT=y
 CONFIG_SYS_CONSOLE_INFO_QUIET=y
 # CONFIG_DISPLAY_BOARDINFO is not set
 CONFIG_DISPLAY_BOARDINFO_LATE=y
-CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
 CONFIG_SPL_I2C_SUPPORT=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_MMC=y
diff --git a/configs/db-mv784mp-gp_defconfig b/configs/db-mv784mp-gp_defconfig
index e1f6aff8f5..1f5c987cfd 100644
--- a/configs/db-mv784mp-gp_defconfig
+++ b/configs/db-mv784mp-gp_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_DB_MV784MP_GP=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x10000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
 CONFIG_DEFAULT_DEVICE_TREE="armada-xp-gp"
 CONFIG_SPL_TEXT_BASE=0x40004030
 CONFIG_SPL_SERIAL_SUPPORT=y
diff --git a/configs/ds414_defconfig b/configs/ds414_defconfig
index b8a0bd09d4..cf0d937295 100644
--- a/configs/ds414_defconfig
+++ b/configs/ds414_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_DS414=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x7E0000
 CONFIG_ENV_SECT_SIZE=0x10000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
 CONFIG_DEFAULT_DEVICE_TREE="armada-xp-synology-ds414"
 CONFIG_SPL_TEXT_BASE=0x40004030
 CONFIG_SPL_SERIAL_SUPPORT=y
diff --git a/configs/helios4_defconfig b/configs/helios4_defconfig
index 202e57344d..4026dd4b89 100644
--- a/configs/helios4_defconfig
+++ b/configs/helios4_defconfig
@@ -24,7 +24,6 @@ CONFIG_USE_PREBOOT=y
 CONFIG_SYS_CONSOLE_INFO_QUIET=y
 # CONFIG_DISPLAY_BOARDINFO is not set
 CONFIG_DISPLAY_BOARDINFO_LATE=y
-CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET=0x1
 CONFIG_SPL_I2C_SUPPORT=y
 CONFIG_CMD_TLV_EEPROM=y
 CONFIG_SPL_CMD_TLV_EEPROM=y
diff --git a/configs/maxbcm_defconfig b/configs/maxbcm_defconfig
index e754108b73..4bcac91057 100644
--- a/configs/maxbcm_defconfig
+++ b/configs/maxbcm_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_MAXBCM=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x10000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
 CONFIG_DEFAULT_DEVICE_TREE="armada-xp-maxbcm"
 CONFIG_SPL_TEXT_BASE=0x40004030
 CONFIG_SPL_SERIAL_SUPPORT=y
diff --git a/configs/theadorable_debug_defconfig b/configs/theadorable_debug_defconfig
index 6d32e6c5be..a479ac7748 100644
--- a/configs/theadorable_debug_defconfig
+++ b/configs/theadorable_debug_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_THEADORABLE=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x40000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x1a000
 CONFIG_DM_GPIO=y
 CONFIG_DEFAULT_DEVICE_TREE="armada-xp-theadorable"
 CONFIG_SPL_TEXT_BASE=0x40004030
diff --git a/configs/turris_omnia_defconfig b/configs/turris_omnia_defconfig
index 5f7b1a67a2..9eec70e8a8 100644
--- a/configs/turris_omnia_defconfig
+++ b/configs/turris_omnia_defconfig
@@ -14,7 +14,6 @@ CONFIG_TARGET_TURRIS_OMNIA=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0xF0000
 CONFIG_ENV_SECT_SIZE=0x10000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
 CONFIG_DM_GPIO=y
 CONFIG_DEFAULT_DEVICE_TREE="armada-385-turris-omnia"
 CONFIG_SPL_TEXT_BASE=0x40000030
diff --git a/configs/x530_defconfig b/configs/x530_defconfig
index dbde392374..49610eda24 100644
--- a/configs/x530_defconfig
+++ b/configs/x530_defconfig
@@ -10,7 +10,6 @@ CONFIG_TARGET_X530=y
 CONFIG_ENV_SIZE=0x10000
 CONFIG_ENV_OFFSET=0x100000
 CONFIG_ENV_SECT_SIZE=0x40000
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
 CONFIG_DM_GPIO=y
 CONFIG_DEFAULT_DEVICE_TREE="armada-385-atl-x530"
 CONFIG_SPL_TEXT_BASE=0x40000030
diff --git a/include/configs/clearfog.h b/include/configs/clearfog.h
index c9852a72b9..255b147945 100644
--- a/include/configs/clearfog.h
+++ b/include/configs/clearfog.h
@@ -71,11 +71,10 @@
 
 #if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x20000
 #elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
 /* SPL related MMC defines */
-#define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
-#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/controlcenterdc.h b/include/configs/controlcenterdc.h
index 869b94bc9b..fffc372872 100644
--- a/include/configs/controlcenterdc.h
+++ b/include/configs/controlcenterdc.h
@@ -87,16 +87,13 @@
 
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x30000
 #endif
 
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
 /* SPL related MMC defines */
 #define CONFIG_SPL_MMC_SUPPORT
-#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
-#define CONFIG_SYS_MMC_U_BOOT_OFFS		(168 << 10)
-#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
-#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	(CONFIG_SYS_U_BOOT_OFFS / 512)
+#define CONFIG_SYS_U_BOOT_OFFS			(168 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/db-88f6720.h b/include/configs/db-88f6720.h
index 213883ef0f..14c0190375 100644
--- a/include/configs/db-88f6720.h
+++ b/include/configs/db-88f6720.h
@@ -66,6 +66,6 @@
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x20000
 
 #endif /* _CONFIG_DB_88F6720_H */
diff --git a/include/configs/db-88f6820-amc.h b/include/configs/db-88f6820-amc.h
index fe9a7ab563..3cd1ff899a 100644
--- a/include/configs/db-88f6820-amc.h
+++ b/include/configs/db-88f6820-amc.h
@@ -61,7 +61,7 @@
 
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x24000
 #endif
 
 /*
diff --git a/include/configs/db-88f6820-gp.h b/include/configs/db-88f6820-gp.h
index ed851bc670..5e43191e8e 100644
--- a/include/configs/db-88f6820-gp.h
+++ b/include/configs/db-88f6820-gp.h
@@ -73,13 +73,12 @@
 
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x24000
 #endif
 
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
 /* SPL related MMC defines */
-#define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
-#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/db-mv784mp-gp.h b/include/configs/db-mv784mp-gp.h
index 3e20516e94..990fcec129 100644
--- a/include/configs/db-mv784mp-gp.h
+++ b/include/configs/db-mv784mp-gp.h
@@ -79,7 +79,7 @@
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x20000
 
 /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
 #define CONFIG_SPD_EEPROM		0x4e
diff --git a/include/configs/ds414.h b/include/configs/ds414.h
index c8b45066cc..b34da334e2 100644
--- a/include/configs/ds414.h
+++ b/include/configs/ds414.h
@@ -70,7 +70,7 @@
 
 #if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x24000
 #endif
 
 /* DS414 bus width is 32bits */
diff --git a/include/configs/helios4.h b/include/configs/helios4.h
index 2cda05c85a..3875377971 100644
--- a/include/configs/helios4.h
+++ b/include/configs/helios4.h
@@ -71,11 +71,10 @@
 
 #if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x20000
 #elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
 /* SPL related MMC defines */
-#define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
-#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h
index 587b134a1b..bfe135da6b 100644
--- a/include/configs/theadorable.h
+++ b/include/configs/theadorable.h
@@ -94,7 +94,7 @@
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x1a000
 
 /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
 #define CONFIG_DDR_FIXED_SIZE		(2 << 20)	/* 2GiB */
diff --git a/include/configs/turris_omnia.h b/include/configs/turris_omnia.h
index 7da18f97db..49ee7a7af5 100644
--- a/include/configs/turris_omnia.h
+++ b/include/configs/turris_omnia.h
@@ -47,13 +47,12 @@
 
 #ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI
 /* SPL related SPI defines */
-# define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+# define CONFIG_SYS_U_BOOT_OFFS		0x24000
 #endif
 
 #ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC
 /* SPL related MMC defines */
-# define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
-# define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
+# define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 # ifdef CONFIG_SPL_BUILD
 #  define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 # endif
diff --git a/include/configs/x530.h b/include/configs/x530.h
index 4446510df4..25b259832a 100644
--- a/include/configs/x530.h
+++ b/include/configs/x530.h
@@ -98,6 +98,6 @@
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
 /* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
+#define CONFIG_SYS_U_BOOT_OFFS		0x24000
 
 #endif /* _CONFIG_X530_H */
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (34 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header Marek Behún
@ 2021-07-19 12:20 ` Marek Behún
  2021-07-22  8:52   ` Stefan Roese
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes Marek Behún
                   ` (5 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:20 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The SPL code now already parses kwbimage v1 headers where all necessary
information about how to load and execute main U-Boot is present. The
legacy 64-byte U-Boot header is not used anymore.

Remove this 64-byte header by putting u-boot.bin binary (instead of
u-boot.img) into kwbimage v1 and let SPL code or BootROM to load U-Boot
directly at its execution address.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
---
 Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index a5a9aef175..6b521573e6 100644
--- a/Makefile
+++ b/Makefile
@@ -1405,7 +1405,7 @@ MKIMAGEFLAGS_u-boot.kwb = -n $(KWD_CONFIG_FILE) \
 	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
 
 MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
-	-T kwbimage -a $(shell printf "0x%x" $$(($(CONFIG_SYS_TEXT_BASE)-64))) -e $(CONFIG_SYS_TEXT_BASE) \
+	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
 	$(if $(KEYDIR),-k $(KEYDIR))
 
 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
@@ -1448,7 +1448,7 @@ u-boot.itb: u-boot-nodtb.bin \
 	$(BOARD_SIZE_CHECK)
 endif
 
-u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
+u-boot-spl.kwb: u-boot.bin spl/u-boot-spl.bin FORCE
 	$(call if_changed,mkimage)
 
 u-boot.sha1:	u-boot.bin
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (35 preceding siblings ...)
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files Marek Behún
@ 2021-07-19 12:21 ` Marek Behún
  2021-07-22  8:52   ` Stefan Roese
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS Marek Behún
                   ` (4 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:21 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

This padding depends on board config file and therefore it makes the
mkimage binary tool board specific, which is not correct. One cannot use
mkimage tool built as a result for board A to generate images for board
B, even if both A and B are on the same platform.

This CONFIG_SYS_U_BOOT_OFFS padding was needed when kwbimage v1 contained
SPL code which loaded main U-Boot binary based on CONFIG_SYS_U_BOOT_OFFS,
instead of reading correct offset from kwbimage header.

Now that SPL code parses kwbimage header and deterinate correct offset,
there is no need for this CONFIG_SYS_U_BOOT_OFFS padding anymore.

By removing it we also reduce the size of SPL code and therefore also
decrease the final size of v1 kwbimage. This means there is more space
for main U-Boot binary.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
---
 tools/Makefile   |  4 ----
 tools/kwbimage.c | 13 -------------
 2 files changed, 17 deletions(-)

diff --git a/tools/Makefile b/tools/Makefile
index 7c27069c86..11a5a15bc2 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -155,10 +155,6 @@ ifdef CONFIG_FIT_CIPHER
 HOST_EXTRACFLAGS	+= -DCONFIG_FIT_CIPHER
 endif
 
-ifneq ($(CONFIG_SYS_U_BOOT_OFFS),)
-HOSTCFLAGS_kwbimage.o += -DCONFIG_SYS_U_BOOT_OFFS=$(CONFIG_SYS_U_BOOT_OFFS)
-endif
-
 # MXSImage needs LibSSL
 ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_FIT_SIGNATURE)$(CONFIG_FIT_CIPHER),)
 HOSTCFLAGS_kwbimage.o += \
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 9ecda861e4..ccb0b92266 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -979,19 +979,6 @@ static size_t image_headersz_v1(int *hasext)
 			*hasext = 1;
 	}
 
-#if defined(CONFIG_SYS_U_BOOT_OFFS)
-	if (headersz > CONFIG_SYS_U_BOOT_OFFS) {
-		fprintf(stderr,
-			"Error: Image header (incl. SPL image) too big!\n");
-		fprintf(stderr, "header=0x%x CONFIG_SYS_U_BOOT_OFFS=0x%x!\n",
-			(int)headersz, CONFIG_SYS_U_BOOT_OFFS);
-		fprintf(stderr, "Increase CONFIG_SYS_U_BOOT_OFFS!\n");
-		return 0;
-	}
-
-	headersz = CONFIG_SYS_U_BOOT_OFFS;
-#endif
-
 	/*
 	 * The payload should be aligned on some reasonable
 	 * boundary
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (36 preceding siblings ...)
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes Marek Behún
@ 2021-07-19 12:21 ` Marek Behún
  2021-07-22  8:53   ` Stefan Roese
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init() Marek Behún
                   ` (3 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:21 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Macro CONFIG_SYS_U_BOOT_OFFS is set but not used anymore. Remove it.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
---
 include/configs/clearfog.h        | 6 +-----
 include/configs/controlcenterdc.h | 6 ------
 include/configs/db-88f6720.h      | 3 ---
 include/configs/db-88f6820-amc.h  | 5 -----
 include/configs/db-88f6820-gp.h   | 6 ------
 include/configs/db-mv784mp-gp.h   | 3 ---
 include/configs/ds414.h           | 5 -----
 include/configs/helios4.h         | 6 +-----
 include/configs/theadorable.h     | 3 ---
 include/configs/turris_omnia.h    | 6 ------
 include/configs/x530.h            | 3 ---
 scripts/config_whitelist.txt      | 1 -
 12 files changed, 2 insertions(+), 51 deletions(-)

diff --git a/include/configs/clearfog.h b/include/configs/clearfog.h
index 255b147945..fbdd2f0a24 100644
--- a/include/configs/clearfog.h
+++ b/include/configs/clearfog.h
@@ -69,12 +69,8 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x20000
-#elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
+#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
 /* SPL related MMC defines */
-#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/controlcenterdc.h b/include/configs/controlcenterdc.h
index fffc372872..e81d05aa2e 100644
--- a/include/configs/controlcenterdc.h
+++ b/include/configs/controlcenterdc.h
@@ -85,15 +85,9 @@
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
 #define CONFIG_SPL_I2C_SUPPORT
 
-#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x30000
-#endif
-
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
 /* SPL related MMC defines */
 #define CONFIG_SPL_MMC_SUPPORT
-#define CONFIG_SYS_U_BOOT_OFFS			(168 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/db-88f6720.h b/include/configs/db-88f6720.h
index 14c0190375..cbb9270f93 100644
--- a/include/configs/db-88f6720.h
+++ b/include/configs/db-88f6720.h
@@ -65,7 +65,4 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x20000
-
 #endif /* _CONFIG_DB_88F6720_H */
diff --git a/include/configs/db-88f6820-amc.h b/include/configs/db-88f6820-amc.h
index 3cd1ff899a..757fbc0b9b 100644
--- a/include/configs/db-88f6820-amc.h
+++ b/include/configs/db-88f6820-amc.h
@@ -59,11 +59,6 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x24000
-#endif
-
 /*
  * mv-common.h should be defined after CMD configs since it used them
  * to enable certain macros
diff --git a/include/configs/db-88f6820-gp.h b/include/configs/db-88f6820-gp.h
index 5e43191e8e..d50eb2c120 100644
--- a/include/configs/db-88f6820-gp.h
+++ b/include/configs/db-88f6820-gp.h
@@ -71,14 +71,8 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x24000
-#endif
-
 #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
 /* SPL related MMC defines */
-#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/db-mv784mp-gp.h b/include/configs/db-mv784mp-gp.h
index 990fcec129..ef7eebd081 100644
--- a/include/configs/db-mv784mp-gp.h
+++ b/include/configs/db-mv784mp-gp.h
@@ -78,9 +78,6 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x20000
-
 /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
 #define CONFIG_SPD_EEPROM		0x4e
 #define CONFIG_BOARD_ECC_SUPPORT	/* this board supports ECC */
diff --git a/include/configs/ds414.h b/include/configs/ds414.h
index b34da334e2..4bbb244fa2 100644
--- a/include/configs/ds414.h
+++ b/include/configs/ds414.h
@@ -68,11 +68,6 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x24000
-#endif
-
 /* DS414 bus width is 32bits */
 #define CONFIG_DDR_32BIT
 
diff --git a/include/configs/helios4.h b/include/configs/helios4.h
index 3875377971..1368080f03 100644
--- a/include/configs/helios4.h
+++ b/include/configs/helios4.h
@@ -69,12 +69,8 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x20000
-#elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
+#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
 /* SPL related MMC defines */
-#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 #endif
diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h
index bfe135da6b..31852fb248 100644
--- a/include/configs/theadorable.h
+++ b/include/configs/theadorable.h
@@ -93,9 +93,6 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x1a000
-
 /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
 #define CONFIG_DDR_FIXED_SIZE		(2 << 20)	/* 2GiB */
 
diff --git a/include/configs/turris_omnia.h b/include/configs/turris_omnia.h
index 49ee7a7af5..0a824b7939 100644
--- a/include/configs/turris_omnia.h
+++ b/include/configs/turris_omnia.h
@@ -45,14 +45,8 @@
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 #define CONFIG_SPL_DRIVERS_MISC_SUPPORT
 
-#ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI
-/* SPL related SPI defines */
-# define CONFIG_SYS_U_BOOT_OFFS		0x24000
-#endif
-
 #ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC
 /* SPL related MMC defines */
-# define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
 # ifdef CONFIG_SPL_BUILD
 #  define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
 # endif
diff --git a/include/configs/x530.h b/include/configs/x530.h
index 25b259832a..515c6e7ff4 100644
--- a/include/configs/x530.h
+++ b/include/configs/x530.h
@@ -97,7 +97,4 @@
 #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
 #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
 
-/* SPL related SPI defines */
-#define CONFIG_SYS_U_BOOT_OFFS		0x24000
-
 #endif /* _CONFIG_X530_H */
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index 042ca116e9..1f88212625 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -3301,7 +3301,6 @@ CONFIG_SYS_USE_NAND
 CONFIG_SYS_USE_NANDFLASH
 CONFIG_SYS_USE_NORFLASH
 CONFIG_SYS_USR_EXCEP
-CONFIG_SYS_U_BOOT_OFFS
 CONFIG_SYS_VCXK_ACKNOWLEDGE_DDR
 CONFIG_SYS_VCXK_ACKNOWLEDGE_PIN
 CONFIG_SYS_VCXK_ACKNOWLEDGE_PORT
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init()
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (37 preceding siblings ...)
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS Marek Behún
@ 2021-07-19 12:21 ` Marek Behún
  2021-07-22  8:55   ` Stefan Roese
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool Marek Behún
                   ` (2 subsequent siblings)
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:21 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Now it is possible to use BootROM to load and boot main U-Boot binary. It
is just required to disable config option CONFIG_SPL_SPI_FLASH_SUPPORT.

gdsys a38x config file (controlcenterdc_defconfig) does not have that
option enabled so there is no need to provide custom spl_board_init()
function which calls return_to_bootrom().

Remove it.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
---
 board/gdsys/a38x/Makefile |  2 +-
 board/gdsys/a38x/spl.c    | 20 --------------------
 2 files changed, 1 insertion(+), 21 deletions(-)
 delete mode 100644 board/gdsys/a38x/spl.c

diff --git a/board/gdsys/a38x/Makefile b/board/gdsys/a38x/Makefile
index 32fffab467..4b13859fed 100644
--- a/board/gdsys/a38x/Makefile
+++ b/board/gdsys/a38x/Makefile
@@ -4,7 +4,7 @@
 # Copyright (C) 2015 Reinhard Pfau <reinhard.pfau@gdsys.cc>
 # Copyright (C) 2016 Mario Six <mario.six@gdsys.cc>
 
-obj-$(CONFIG_TARGET_CONTROLCENTERDC) += controlcenterdc.o hre.o spl.o keyprogram.o dt_helpers.o
+obj-$(CONFIG_TARGET_CONTROLCENTERDC) += controlcenterdc.o hre.o keyprogram.o dt_helpers.o
 
 ifeq ($(CONFIG_SPL_BUILD),)
 obj-$(CONFIG_TARGET_CONTROLCENTERDC) += hydra.o ihs_phys.o
diff --git a/board/gdsys/a38x/spl.c b/board/gdsys/a38x/spl.c
deleted file mode 100644
index 84864d1974..0000000000
--- a/board/gdsys/a38x/spl.c
+++ /dev/null
@@ -1,20 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2016
- * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
- */
-
-#include <common.h>
-#include <config.h>
-#include <asm/arch/cpu.h>
-
-void spl_board_init(void)
-{
-#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
-	u32 *bootrom_save = (u32 *)CONFIG_SPL_BOOTROM_SAVE;
-	u32 *regs = (u32 *)(*bootrom_save);
-
-	printf("Returning to BootROM (return address %08x)...\n", regs[13]);
-	return_to_bootrom();
-#endif
-}
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (38 preceding siblings ...)
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init() Marek Behún
@ 2021-07-19 12:21 ` Marek Behún
  2021-07-22  8:55   ` Stefan Roese
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image Marek Behún
  2021-07-22  7:35 ` [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Stefan Roese
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:21 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

The kwbimage library does not support extracting subimages. Implement it.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.c | 72 ++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 64 insertions(+), 8 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index ccb0b92266..5665198db0 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -1849,17 +1849,73 @@ static int kwbimage_generate(struct image_tool_params *params,
 		return 4 + (4 - s.st_size % 4) % 4;
 }
 
+static int kwbimage_extract_subimage(void *ptr, struct image_tool_params *params)
+{
+	struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr;
+	size_t header_size = kwbimage_header_size(ptr);
+	int idx = params->pflag;
+	int cur_idx = 0;
+	uint32_t offset;
+	ulong image;
+	ulong size;
+
+	if (image_version((void *)ptr) == 1 && (mhdr->ext & 0x1)) {
+		struct opt_hdr_v1 *ohdr = (struct opt_hdr_v1 *)
+					  ((uint8_t *)ptr +
+					   sizeof(*mhdr));
+
+		while (1) {
+			uint32_t ohdr_size = (ohdr->headersz_msb << 16) |
+					     le16_to_cpu(ohdr->headersz_lsb);
+
+			if (ohdr->headertype == OPT_HDR_V1_BINARY_TYPE) {
+				if (idx == cur_idx) {
+					image = (ulong)&ohdr->data[4 +
+					         4 * ohdr->data[0]];
+					size = ohdr_size - 12 -
+					       4 * ohdr->data[0];
+					goto extract;
+				}
+				++cur_idx;
+			}
+			if (!(*((uint8_t *)ohdr + ohdr_size - 4) & 0x1))
+				break;
+			ohdr = (struct opt_hdr_v1 *)((uint8_t *)ohdr +
+						     ohdr_size);
+		}
+	}
+
+	if (idx != cur_idx) {
+		printf("Image %d is not present\n", idx);
+		return -1;
+	}
+
+	offset = le32_to_cpu(mhdr->srcaddr);
+
+	if (mhdr->blockid == IBR_HDR_SATA_ID) {
+		offset -= 1;
+		offset *= 512;
+	}
+
+	if (mhdr->blockid == IBR_HDR_SDIO_ID)
+		offset *= 512;
+
+	if (mhdr->blockid == IBR_HDR_PEX_ID && offset == 0xFFFFFFFF)
+		offset = header_size;
+
+	image = (ulong)((uint8_t *)ptr + offset);
+	size = le32_to_cpu(mhdr->blocksize) - 4;
+
+extract:
+	return imagetool_save_subimage(params->outfile, image, size);
+}
+
 /*
  * Report Error if xflag is set in addition to default
  */
 static int kwbimage_check_params(struct image_tool_params *params)
 {
-	if (params->iflag) {
-		fprintf(stderr, "%s: kwbimage does not support extract operation\n", params->cmdname);
-		return CFG_INVALID;
-	}
-
-	if (!params->imagename || !strlen(params->imagename)) {
+	if (!params->iflag && (!params->imagename || !strlen(params->imagename))) {
 		char *msg = "Configuration file for kwbimage creation omitted";
 
 		fprintf(stderr, "Error:%s - %s\n", params->cmdname, msg);
@@ -1869,7 +1925,7 @@ static int kwbimage_check_params(struct image_tool_params *params)
 	return (params->dflag && (params->fflag || params->lflag)) ||
 		(params->fflag && (params->dflag || params->lflag)) ||
 		(params->lflag && (params->dflag || params->fflag)) ||
-		(params->xflag) || !(strlen(params->imagename));
+		(params->xflag);
 }
 
 /*
@@ -1884,7 +1940,7 @@ U_BOOT_IMAGE_TYPE(
 	kwbimage_verify_header,
 	kwbimage_print_header,
 	kwbimage_set_header,
-	NULL,
+	kwbimage_extract_subimage,
 	kwbimage_check_image_types,
 	NULL,
 	kwbimage_generate
-- 
2.31.1


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

* [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (39 preceding siblings ...)
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool Marek Behún
@ 2021-07-19 12:21 ` Marek Behún
  2021-07-22  8:56   ` Stefan Roese
  2021-07-22  7:35 ` [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Stefan Roese
  41 siblings, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:21 UTC (permalink / raw)
  To: u-boot, Chris Packham, Stefan Roese, Baruch Siach, Dirk Eibach,
	Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár,
	Marek Behún

From: Pali Rohár <pali@kernel.org>

Extracting is now supported by dumpimage, so mention it in help instead
of `kwbimage -x`.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
---
 tools/kwbimage.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 5665198db0..00cb338d64 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -961,7 +961,7 @@ static size_t image_headersz_v1(int *hasext)
 			fprintf(stderr,
 				"Didn't find the file '%s' in '%s' which is mandatory to generate the image\n"
 				"This file generally contains the DDR3 training code, and should be extracted from an existing bootable\n"
-				"image for your board. See 'kwbimage -x' to extract it from an existing image.\n",
+				"image for your board. Use 'dumpimage -T kwbimage -p 0' to extract it from an existing image.\n",
 				binarye->binary.file, dir);
 			return 0;
 		}
-- 
2.31.1


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

* Re: [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X Marek Behún
@ 2021-07-19 12:50   ` Marek Behún
  2021-07-19 12:52     ` Stefan Roese
  2021-07-21  9:36   ` Stefan Roese
  1 sibling, 1 reply; 65+ messages in thread
From: Marek Behún @ 2021-07-19 12:50 UTC (permalink / raw)
  To: Stefan Roese
  Cc: u-boot, Chris Packham, Baruch Siach, Chris Packham,
	Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

Hi Stefan,

just noticed that this patch and patch 37 need rebase (some lines are
at different offset in tools/Makefile).

The fix is pretty simple, but I can send v3, if you want.

Marek

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

* Re: [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X
  2021-07-19 12:50   ` Marek Behún
@ 2021-07-19 12:52     ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-19 12:52 UTC (permalink / raw)
  To: Marek Behún
  Cc: u-boot, Chris Packham, Baruch Siach, Chris Packham,
	Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

Hi Marek,

On 19.07.21 14:50, Marek Behún wrote:
> Hi Stefan,
> 
> just noticed that this patch and patch 37 need rebase (some lines are
> at different offset in tools/Makefile).
> 
> The fix is pretty simple, but I can send v3, if you want.

No need, thanks. I'll try to resolve the merge conflict myself, once
I'll apply this series. If I need some assistance, I'll let you know. ;)

Thanks,
Stefan

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

* Re: [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256 Marek Behún
@ 2021-07-21  9:31   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:31 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The number is stored in one byte, so the maximum should be 255.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 76c25628d4..2d4574af7d 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -89,7 +89,7 @@ struct nand_ecc_mode nand_ecc_modes[] = {
>   /* Used to identify an undefined execution or destination address */
>   #define ADDR_INVALID ((uint32_t)-1)
>   
> -#define BINARY_MAX_ARGS 8
> +#define BINARY_MAX_ARGS 255
>   
>   /* In-memory representation of a line of the configuration file */
>   
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header Marek Behún
@ 2021-07-21  9:32   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:32 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Binary header consist of:
> * 1 byte for header type
> * 3 bytes for header size
> * 1 byte for number of arguments
> * 3 reserved bytes
> * N*4 bytes for arguments
> * M bytes (aligned to 4 bytes) for executable data
> * 1 byte for information about next header
> * 3 reserved bytes
> 
> The first four bytes are specified as
>    sizeof(struct opt_hdr_v1)
> and the remaining bytes as
>    ALIGN(s.st_size, 4) + (binarye->binary.nargs + 2) * sizeof(uint32_t)
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 11 ++---------
>   1 file changed, 2 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 2d4574af7d..6c9f93ae8b 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -984,7 +984,7 @@ static size_t image_headersz_v1(int *hasext)
>   		}
>   
>   		headersz += sizeof(struct opt_hdr_v1) +
> -			s.st_size +
> +			ALIGN(s.st_size, 4) +
>   			(binarye->binary.nargs + 2) * sizeof(uint32_t);
>   		if (hasext)
>   			*hasext = 1;
> @@ -1051,14 +1051,7 @@ int add_binary_header_v1(uint8_t *cur)
>   
>   	binhdrsz = sizeof(struct opt_hdr_v1) +
>   		(binarye->binary.nargs + 2) * sizeof(uint32_t) +
> -		s.st_size;
> -
> -	/*
> -	 * The size includes the binary image size, rounded
> -	 * up to a 4-byte boundary. Plus 4 bytes for the
> -	 * next-header byte and 3-byte alignment at the end.
> -	 */
> -	binhdrsz = ALIGN(binhdrsz, 4) + 4;
> +		ALIGN(s.st_size, 4);
>   	hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF);
>   	hdr->headersz_msb = (binhdrsz & 0xFFFF0000) >> 16;
>   
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers Marek Behún
@ 2021-07-21  9:32   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:32 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The kwbimage v1 format supports multiple BINARY executable headers.
> Add support for it into mkimage/kwbimage tool.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>
> Tested-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 59 +++++++++++++++++++++++-------------------------
>   1 file changed, 28 insertions(+), 31 deletions(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 6c9f93ae8b..1bfc524424 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -942,6 +942,7 @@ static size_t image_headersz_v1(int *hasext)
>   {
>   	struct image_cfg_element *binarye;
>   	size_t headersz;
> +	int cfgi;
>   
>   	/*
>   	 * Calculate the size of the header and the size of the
> @@ -949,21 +950,19 @@ static size_t image_headersz_v1(int *hasext)
>   	 */
>   	headersz = sizeof(struct main_hdr_v1);
>   
> -	if (image_count_options(IMAGE_CFG_BINARY) > 1) {
> -		fprintf(stderr, "More than one binary blob, not supported\n");
> -		return 0;
> -	}
> -
>   	if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) {
>   		fprintf(stderr, "More than one payload, not possible\n");
>   		return 0;
>   	}
>   
> -	binarye = image_find_option(IMAGE_CFG_BINARY);
> -	if (binarye) {
> +	for (cfgi = 0; cfgi < cfgn; cfgi++) {
>   		int ret;
>   		struct stat s;
>   
> +		binarye = &image_cfg[cfgi];
> +		if (binarye->type != IMAGE_CFG_BINARY)
> +			continue;
> +
>   		ret = stat(binarye->binary.file, &s);
>   		if (ret < 0) {
>   			char cwd[PATH_MAX];
> @@ -1018,10 +1017,10 @@ static size_t image_headersz_v1(int *hasext)
>   	return ALIGN(headersz, 4096);
>   }
>   
> -int add_binary_header_v1(uint8_t *cur)
> +int add_binary_header_v1(uint8_t **cur, uint8_t **next_ext,
> +			 struct image_cfg_element *binarye)
>   {
> -	struct image_cfg_element *binarye;
> -	struct opt_hdr_v1 *hdr = (struct opt_hdr_v1 *)cur;
> +	struct opt_hdr_v1 *hdr = (struct opt_hdr_v1 *)*cur;
>   	uint32_t *args;
>   	size_t binhdrsz;
>   	struct stat s;
> @@ -1029,11 +1028,6 @@ int add_binary_header_v1(uint8_t *cur)
>   	FILE *bin;
>   	int ret;
>   
> -	binarye = image_find_option(IMAGE_CFG_BINARY);
> -
> -	if (!binarye)
> -		return 0;
> -
>   	hdr->headertype = OPT_HDR_V1_BINARY_TYPE;
>   
>   	bin = fopen(binarye->binary.file, "r");
> @@ -1055,17 +1049,17 @@ int add_binary_header_v1(uint8_t *cur)
>   	hdr->headersz_lsb = cpu_to_le16(binhdrsz & 0xFFFF);
>   	hdr->headersz_msb = (binhdrsz & 0xFFFF0000) >> 16;
>   
> -	cur += sizeof(struct opt_hdr_v1);
> +	*cur += sizeof(struct opt_hdr_v1);
>   
> -	args = (uint32_t *)cur;
> +	args = (uint32_t *)*cur;
>   	*args = cpu_to_le32(binarye->binary.nargs);
>   	args++;
>   	for (argi = 0; argi < binarye->binary.nargs; argi++)
>   		args[argi] = cpu_to_le32(binarye->binary.args[argi]);
>   
> -	cur += (binarye->binary.nargs + 1) * sizeof(uint32_t);
> +	*cur += (binarye->binary.nargs + 1) * sizeof(uint32_t);
>   
> -	ret = fread(cur, s.st_size, 1, bin);
> +	ret = fread(*cur, s.st_size, 1, bin);
>   	if (ret != 1) {
>   		fprintf(stderr,
>   			"Could not read binary image %s\n",
> @@ -1075,17 +1069,13 @@ int add_binary_header_v1(uint8_t *cur)
>   
>   	fclose(bin);
>   
> -	cur += ALIGN(s.st_size, 4);
> +	*cur += ALIGN(s.st_size, 4);
>   
> -	/*
> -	 * For now, we don't support more than one binary
> -	 * header, and no other header types are
> -	 * supported. So, the binary header is necessarily the
> -	 * last one
> -	 */
> -	*((uint32_t *)cur) = 0x00000000;
> +	*((uint32_t *)*cur) = 0x00000000;
> +	**next_ext = 1;
> +	*next_ext = *cur;
>   
> -	cur += sizeof(uint32_t);
> +	*cur += sizeof(uint32_t);
>   
>   	return 0;
>   
> @@ -1218,6 +1208,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   	uint8_t *image, *cur;
>   	int hasext = 0;
>   	uint8_t *next_ext = NULL;
> +	int cfgi;
>   
>   	/*
>   	 * Calculate the size of the header and the size of the
> @@ -1296,13 +1287,19 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   		 */
>   		secure_hdr = (struct secure_hdr_v1 *)cur;
>   		cur += sizeof(struct secure_hdr_v1);
> +		*next_ext = 1;
>   		next_ext = &secure_hdr->next;
>   	}
>   #endif
> -	*next_ext = 1;
>   
> -	if (add_binary_header_v1(cur))
> -		return NULL;
> +	for (cfgi = 0; cfgi < cfgn; cfgi++) {
> +		e = &image_cfg[cfgi];
> +		if (e->type != IMAGE_CFG_BINARY)
> +			continue;
> +
> +		if (add_binary_header_v1(&cur, &next_ext, e))
> +			return NULL;
> +	}
>   
>   #if defined(CONFIG_KWB_SECURE)
>   	if (secure_hdr && add_secure_header_v1(params, ptr, payloadsz,
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword Marek Behún
@ 2021-07-21  9:33   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:33 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The PAYLOAD keyword does nothing. No code is using it and both mkimage
> and kwbimage completely ignore it. It looks like a relict from the past.
> The payload image itself can be specified only via -d parameter to
> mkimage.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>
> Tested-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 13 -------------
>   1 file changed, 13 deletions(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 1bfc524424..74a77412d7 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -103,7 +103,6 @@ enum image_cfg_type {
>   	IMAGE_CFG_NAND_ECC_MODE,
>   	IMAGE_CFG_NAND_PAGESZ,
>   	IMAGE_CFG_BINARY,
> -	IMAGE_CFG_PAYLOAD,
>   	IMAGE_CFG_DATA,
>   	IMAGE_CFG_BAUDRATE,
>   	IMAGE_CFG_DEBUG,
> @@ -131,7 +130,6 @@ static const char * const id_strs[] = {
>   	[IMAGE_CFG_NAND_ECC_MODE] = "NAND_ECC_MODE",
>   	[IMAGE_CFG_NAND_PAGESZ] = "NAND_PAGE_SIZE",
>   	[IMAGE_CFG_BINARY] = "BINARY",
> -	[IMAGE_CFG_PAYLOAD] = "PAYLOAD",
>   	[IMAGE_CFG_DATA] = "DATA",
>   	[IMAGE_CFG_BAUDRATE] = "BAUDRATE",
>   	[IMAGE_CFG_DEBUG] = "DEBUG",
> @@ -157,7 +155,6 @@ struct image_cfg_element {
>   			unsigned int args[BINARY_MAX_ARGS];
>   			unsigned int nargs;
>   		} binary;
> -		const char *payload;
>   		unsigned int dstaddr;
>   		unsigned int execaddr;
>   		unsigned int nandblksz;
> @@ -874,11 +871,6 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
>   		headersz += sizeof(struct ext_hdr_v0);
>   	}
>   
> -	if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) {
> -		fprintf(stderr, "More than one payload, not possible\n");
> -		return NULL;
> -	}
> -
>   	image = malloc(headersz);
>   	if (!image) {
>   		fprintf(stderr, "Cannot allocate memory for image\n");
> @@ -950,11 +942,6 @@ static size_t image_headersz_v1(int *hasext)
>   	 */
>   	headersz = sizeof(struct main_hdr_v1);
>   
> -	if (image_count_options(IMAGE_CFG_PAYLOAD) > 1) {
> -		fprintf(stderr, "More than one payload, not possible\n");
> -		return 0;
> -	}
> -
>   	for (cfgi = 0; cfgi < cfgn; cfgi++) {
>   		int ret;
>   		struct stat s;
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images Marek Behún
@ 2021-07-21  9:35   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:35 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The DATA command is already supported by mkimage for v0 images, but not
> for v1 images.
> 
> BootROM code which executes v1 images also supports DATA command via an
> optional extended v1 header OPT_HDR_V1_REGISTER_TYPE.
> 
> Implement support for DATA command for v1 images.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>
> Tested-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 32 +++++++++++++++++++++++++++++++-
>   tools/kwbimage.h | 27 +++++++++++++++++++++++++++
>   2 files changed, 58 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 74a77412d7..b585f49180 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -933,6 +933,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
>   static size_t image_headersz_v1(int *hasext)
>   {
>   	struct image_cfg_element *binarye;
> +	unsigned int count;
>   	size_t headersz;
>   	int cfgi;
>   
> @@ -942,6 +943,10 @@ static size_t image_headersz_v1(int *hasext)
>   	 */
>   	headersz = sizeof(struct main_hdr_v1);
>   
> +	count = image_count_options(IMAGE_CFG_DATA);
> +	if (count > 0)
> +		headersz += sizeof(struct register_set_hdr_v1) + 8 * count + 4;
> +
>   	for (cfgi = 0; cfgi < cfgn; cfgi++) {
>   		int ret;
>   		struct stat s;
> @@ -1188,6 +1193,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   {
>   	struct image_cfg_element *e;
>   	struct main_hdr_v1 *main_hdr;
> +	struct register_set_hdr_v1 *register_set_hdr;
>   #if defined(CONFIG_KWB_SECURE)
>   	struct secure_hdr_v1 *secure_hdr = NULL;
>   #endif
> @@ -1195,7 +1201,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   	uint8_t *image, *cur;
>   	int hasext = 0;
>   	uint8_t *next_ext = NULL;
> -	int cfgi;
> +	int cfgi, datai, size;
>   
>   	/*
>   	 * Calculate the size of the header and the size of the
> @@ -1279,6 +1285,30 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   	}
>   #endif
>   
> +	datai = 0;
> +	register_set_hdr = (struct register_set_hdr_v1 *)cur;
> +	for (cfgi = 0; cfgi < cfgn; cfgi++) {
> +		e = &image_cfg[cfgi];
> +		if (e->type != IMAGE_CFG_DATA)
> +			continue;
> +		register_set_hdr->data[datai].entry.address =
> +			cpu_to_le32(e->regdata.raddr);
> +		register_set_hdr->data[datai].entry.value =
> +			cpu_to_le32(e->regdata.rdata);
> +		datai++;
> +	}
> +	if (datai != 0) {
> +		size = sizeof(struct register_set_hdr_v1) + 8 * datai + 4;
> +		register_set_hdr->headertype = OPT_HDR_V1_REGISTER_TYPE;
> +		register_set_hdr->headersz_lsb = cpu_to_le16(size & 0xFFFF);
> +		register_set_hdr->headersz_msb = size >> 16;
> +		/* Set delay to the smallest possible value 1ms. */
> +		register_set_hdr->data[datai].last_entry.delay = 1;
> +		cur += size;
> +		*next_ext = 1;
> +		next_ext = &register_set_hdr->data[datai].last_entry.next;
> +	}
> +
>   	for (cfgi = 0; cfgi < cfgn; cfgi++) {
>   		e = &image_cfg[cfgi];
>   		if (e->type != IMAGE_CFG_BINARY)
> diff --git a/tools/kwbimage.h b/tools/kwbimage.h
> index cab3d95d13..9f86da46e8 100644
> --- a/tools/kwbimage.h
> +++ b/tools/kwbimage.h
> @@ -148,6 +148,33 @@ struct secure_hdr_v1 {
>   	uint16_t reserved5;		/* 0x25E2 - 0x25E3 */
>   };
>   
> +/*
> + * Structure of register set
> + */
> +struct register_set_hdr_v1 {
> +	uint8_t  headertype;		/* 0x0 */
> +	uint8_t  headersz_msb;		/* 0x1 */
> +	uint16_t headersz_lsb;		/* 0x2 - 0x3 */
> +	union {
> +		struct {
> +			uint32_t address;	/* 0x4+8*N - 0x7+8*N */
> +			uint32_t value;		/* 0x8+8*N - 0xB+8*N */
> +		} entry;
> +		struct {
> +			uint8_t  next;		/* 0xC+8*N */
> +			uint8_t  delay;		/* 0xD+8*N */
> +			uint16_t reserved;	/* 0xE+8*N - 0xF+8*N */
> +		} last_entry;
> +	} data[];
> +};
> +
> +/*
> + * Value 0 in register_set_hdr_v1 delay field is special.
> + * Instead of delay it setup SDRAM Controller.
> + */
> +#define REGISTER_SET_HDR_OPT_DELAY_SDRAM_SETUP 0
> +#define REGISTER_SET_HDR_OPT_DELAY_MS(val) ((val) ?: 1)
> +
>   /*
>    * Various values for the opt_hdr_v1->headertype field, describing the
>    * different types of optional headers. The "secure" header contains
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command Marek Behún
@ 2021-07-21  9:35   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:35 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> This command is supported only by v1 images and specifies a milliseconds
> delay after executing some set of DATA commands. The special string value
> SDRAM_SETUP instructs BootROM to setup SDRAM controller instead of
> executing delay. SDRAM_SETUP may be specified only once and after the
> last DATA command.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>
> Tested-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 24 +++++++++++++++++++++++-
>   1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index b585f49180..469e5b55f2 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -104,6 +104,7 @@ enum image_cfg_type {
>   	IMAGE_CFG_NAND_PAGESZ,
>   	IMAGE_CFG_BINARY,
>   	IMAGE_CFG_DATA,
> +	IMAGE_CFG_DATA_DELAY,
>   	IMAGE_CFG_BAUDRATE,
>   	IMAGE_CFG_DEBUG,
>   	IMAGE_CFG_KAK,
> @@ -131,6 +132,7 @@ static const char * const id_strs[] = {
>   	[IMAGE_CFG_NAND_PAGESZ] = "NAND_PAGE_SIZE",
>   	[IMAGE_CFG_BINARY] = "BINARY",
>   	[IMAGE_CFG_DATA] = "DATA",
> +	[IMAGE_CFG_DATA_DELAY] = "DATA_DELAY",
>   	[IMAGE_CFG_BAUDRATE] = "BAUDRATE",
>   	[IMAGE_CFG_DEBUG] = "DEBUG",
>   	[IMAGE_CFG_KAK] = "KAK",
> @@ -162,6 +164,7 @@ struct image_cfg_element {
>   		unsigned int nandeccmode;
>   		unsigned int nandpagesz;
>   		struct ext_hdr_v0_reg regdata;
> +		unsigned int regdata_delay;
>   		unsigned int baudrate;
>   		unsigned int debug;
>   		const char *key_name;
> @@ -1289,8 +1292,21 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   	register_set_hdr = (struct register_set_hdr_v1 *)cur;
>   	for (cfgi = 0; cfgi < cfgn; cfgi++) {
>   		e = &image_cfg[cfgi];
> -		if (e->type != IMAGE_CFG_DATA)
> +		if (e->type != IMAGE_CFG_DATA &&
> +		    e->type != IMAGE_CFG_DATA_DELAY)
>   			continue;
> +		if (e->type == IMAGE_CFG_DATA_DELAY) {
> +			size = sizeof(struct register_set_hdr_v1) + 8 * datai + 4;
> +			register_set_hdr->headertype = OPT_HDR_V1_REGISTER_TYPE;
> +			register_set_hdr->headersz_lsb = cpu_to_le16(size & 0xFFFF);
> +			register_set_hdr->headersz_msb = size >> 16;
> +			register_set_hdr->data[datai].last_entry.delay = e->regdata_delay;
> +			cur += size;
> +			*next_ext = 1;
> +			next_ext = &register_set_hdr->data[datai].last_entry.next;
> +			datai = 0;
> +			continue;
> +		}
>   		register_set_hdr->data[datai].entry.address =
>   			cpu_to_le32(e->regdata.raddr);
>   		register_set_hdr->data[datai].entry.value =
> @@ -1429,6 +1445,12 @@ static int image_create_config_parse_oneline(char *line,
>   		el->regdata.raddr = strtoul(value1, NULL, 16);
>   		el->regdata.rdata = strtoul(value2, NULL, 16);
>   		break;
> +	case IMAGE_CFG_DATA_DELAY:
> +		if (!strcmp(value1, "SDRAM_SETUP"))
> +			el->regdata_delay = REGISTER_SET_HDR_OPT_DELAY_SDRAM_SETUP;
> +		else
> +			el->regdata_delay = REGISTER_SET_HDR_OPT_DELAY_MS(strtoul(value1, NULL, 10));
> +		break;
>   	case IMAGE_CFG_BAUDRATE:
>   		el->baudrate = strtoul(value1, NULL, 10);
>   		break;
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X Marek Behún
  2021-07-19 12:50   ` Marek Behún
@ 2021-07-21  9:36   ` Stefan Roese
  1 sibling, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:36 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The mkimage host tool can be used to generate kwbimage v1 image with
> secure header on host system for A38x plaform also when U-Boot is being
> compiled for different platform. So there is no reason to not allow
> compiling of mkimage/kwbimage with secure header support for e.g. x86-64
> host.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>
> Tested-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/Makefile   |  4 ----
>   tools/kwbimage.c | 22 ----------------------
>   2 files changed, 26 deletions(-)
> 
> diff --git a/tools/Makefile b/tools/Makefile
> index fadf3135d6..7c27069c86 100644
> --- a/tools/Makefile
> +++ b/tools/Makefile
> @@ -159,10 +159,6 @@ ifneq ($(CONFIG_SYS_U_BOOT_OFFS),)
>   HOSTCFLAGS_kwbimage.o += -DCONFIG_SYS_U_BOOT_OFFS=$(CONFIG_SYS_U_BOOT_OFFS)
>   endif
>   
> -ifneq ($(CONFIG_ARMADA_38X),)
> -HOSTCFLAGS_kwbimage.o += -DCONFIG_KWB_SECURE
> -endif
> -
>   # MXSImage needs LibSSL
>   ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_FIT_SIGNATURE)$(CONFIG_FIT_CIPHER),)
>   HOSTCFLAGS_kwbimage.o += \
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 469e5b55f2..f3b16d94ad 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -16,7 +16,6 @@
>   #include <stdint.h>
>   #include "kwbimage.h"
>   
> -#ifdef CONFIG_KWB_SECURE
>   #include <openssl/bn.h>
>   #include <openssl/rsa.h>
>   #include <openssl/pem.h>
> @@ -42,13 +41,10 @@ void EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
>   	EVP_MD_CTX_reset(ctx);
>   }
>   #endif
> -#endif
>   
>   static struct image_cfg_element *image_cfg;
>   static int cfgn;
> -#ifdef CONFIG_KWB_SECURE
>   static int verbose_mode;
> -#endif
>   
>   struct boot_mode {
>   	unsigned int id;
> @@ -243,8 +239,6 @@ image_count_options(unsigned int optiontype)
>   	return count;
>   }
>   
> -#if defined(CONFIG_KWB_SECURE)
> -
>   static int image_get_csk_index(void)
>   {
>   	struct image_cfg_element *e;
> @@ -267,8 +261,6 @@ static bool image_get_spezialized_img(void)
>   	return e->sec_specialized_img;
>   }
>   
> -#endif
> -
>   /*
>    * Compute a 8-bit checksum of a memory area. This algorithm follows
>    * the requirements of the Marvell SoC BootROM specifications.
> @@ -363,7 +355,6 @@ static uint8_t baudrate_to_option(unsigned int baudrate)
>   	}
>   }
>   
> -#if defined(CONFIG_KWB_SECURE)
>   static void kwb_msg(const char *fmt, ...)
>   {
>   	if (verbose_mode) {
> @@ -852,8 +843,6 @@ done:
>   	return ret;
>   }
>   
> -#endif
> -
>   static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
>   			     int payloadsz)
>   {
> @@ -984,13 +973,11 @@ static size_t image_headersz_v1(int *hasext)
>   			*hasext = 1;
>   	}
>   
> -#if defined(CONFIG_KWB_SECURE)
>   	if (image_get_csk_index() >= 0) {
>   		headersz += sizeof(struct secure_hdr_v1);
>   		if (hasext)
>   			*hasext = 1;
>   	}
> -#endif
>   
>   #if defined(CONFIG_SYS_U_BOOT_OFFS)
>   	if (headersz > CONFIG_SYS_U_BOOT_OFFS) {
> @@ -1080,8 +1067,6 @@ err_close:
>   	return -1;
>   }
>   
> -#if defined(CONFIG_KWB_SECURE)
> -
>   int export_pub_kak_hash(RSA *kak, struct secure_hdr_v1 *secure_hdr)
>   {
>   	FILE *hashf;
> @@ -1189,7 +1174,6 @@ int add_secure_header_v1(struct image_tool_params *params, uint8_t *ptr,
>   
>   	return 0;
>   }
> -#endif
>   
>   static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   			     uint8_t *ptr, int payloadsz)
> @@ -1197,9 +1181,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   	struct image_cfg_element *e;
>   	struct main_hdr_v1 *main_hdr;
>   	struct register_set_hdr_v1 *register_set_hdr;
> -#if defined(CONFIG_KWB_SECURE)
>   	struct secure_hdr_v1 *secure_hdr = NULL;
> -#endif
>   	size_t headersz;
>   	uint8_t *image, *cur;
>   	int hasext = 0;
> @@ -1275,7 +1257,6 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   	if (main_hdr->blockid == IBR_HDR_PEX_ID)
>   		main_hdr->srcaddr = cpu_to_le32(0xFFFFFFFF);
>   
> -#if defined(CONFIG_KWB_SECURE)
>   	if (image_get_csk_index() >= 0) {
>   		/*
>   		 * only reserve the space here; we fill the header later since
> @@ -1286,7 +1267,6 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   		*next_ext = 1;
>   		next_ext = &secure_hdr->next;
>   	}
> -#endif
>   
>   	datai = 0;
>   	register_set_hdr = (struct register_set_hdr_v1 *)cur;
> @@ -1334,11 +1314,9 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
>   			return NULL;
>   	}
>   
> -#if defined(CONFIG_KWB_SECURE)
>   	if (secure_hdr && add_secure_header_v1(params, ptr, payloadsz,
>   					       headersz, image, secure_hdr))
>   		return NULL;
> -#endif
>   
>   	/* Calculate and set the header checksum */
>   	main_hdr->checksum = image_checksum8(main_hdr, headersz);
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed Marek Behún
@ 2021-07-21  9:38   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:38 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> These structures must have specific size without padding, so mark them as
> packed via the de-facto standard macro __packed. Also replace PACKED
> macro.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.h | 30 ++++++++++++++++++------------
>   tools/kwboot.c   |  8 +-------
>   2 files changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/tools/kwbimage.h b/tools/kwbimage.h
> index 9f86da46e8..e063e3e41e 100644
> --- a/tools/kwbimage.h
> +++ b/tools/kwbimage.h
> @@ -11,6 +11,12 @@
>   #include <compiler.h>
>   #include <stdint.h>
>   
> +#ifdef __GNUC__
> +#define __packed __attribute((packed))
> +#else
> +#define __packed
> +#endif
> +
>   #define KWBIMAGE_MAX_CONFIG	((0x1dc - 0x20)/sizeof(struct reg_config))
>   #define MAX_TEMPBUF_LEN		32
>   
> @@ -46,12 +52,12 @@ struct main_hdr_v0 {
>   	uint16_t rsvd2;			/* 0x1C-0x1D */
>   	uint8_t  ext;			/* 0x1E      */
>   	uint8_t  checksum;		/* 0x1F      */
> -};
> +} __packed;
>   
>   struct ext_hdr_v0_reg {
>   	uint32_t raddr;
>   	uint32_t rdata;
> -};
> +} __packed;
>   
>   #define EXT_HDR_V0_REG_COUNT ((0x1dc - 0x20) / sizeof(struct ext_hdr_v0_reg))
>   
> @@ -61,12 +67,12 @@ struct ext_hdr_v0 {
>   	struct ext_hdr_v0_reg rcfg[EXT_HDR_V0_REG_COUNT];
>   	uint8_t               reserved2[7];
>   	uint8_t               checksum;
> -};
> +} __packed;
>   
>   struct kwb_header {
>   	struct main_hdr_v0	kwb_hdr;
>   	struct ext_hdr_v0	kwb_exthdr;
> -};
> +} __packed;
>   
>   /* Structure of the main header, version 1 (Armada 370/38x/XP) */
>   struct main_hdr_v1 {
> @@ -87,7 +93,7 @@ struct main_hdr_v1 {
>   	uint16_t reserved5;             /* 0x1C-0x1D */
>   	uint8_t  ext;                   /* 0x1E      */
>   	uint8_t  checksum;              /* 0x1F      */
> -};
> +} __packed;
>   
>   /*
>    * Main header options
> @@ -109,21 +115,21 @@ struct opt_hdr_v1 {
>   	uint8_t  headersz_msb;
>   	uint16_t headersz_lsb;
>   	char     data[0];
> -};
> +} __packed;
>   
>   /*
>    * Public Key data in DER format
>    */
>   struct pubkey_der_v1 {
>   	uint8_t key[524];
> -};
> +} __packed;
>   
>   /*
>    * Signature (RSA 2048)
>    */
>   struct sig_v1 {
>   	uint8_t sig[256];
> -};
> +} __packed;
>   
>   /*
>    * Structure of secure header (Armada 38x)
> @@ -146,7 +152,7 @@ struct secure_hdr_v1 {
>   	uint8_t  next;			/* 0x25E0 */
>   	uint8_t  reserved4;		/* 0x25E1 */
>   	uint16_t reserved5;		/* 0x25E2 - 0x25E3 */
> -};
> +} __packed;
>   
>   /*
>    * Structure of register set
> @@ -159,14 +165,14 @@ struct register_set_hdr_v1 {
>   		struct {
>   			uint32_t address;	/* 0x4+8*N - 0x7+8*N */
>   			uint32_t value;		/* 0x8+8*N - 0xB+8*N */
> -		} entry;
> +		} __packed entry;
>   		struct {
>   			uint8_t  next;		/* 0xC+8*N */
>   			uint8_t  delay;		/* 0xD+8*N */
>   			uint16_t reserved;	/* 0xE+8*N - 0xF+8*N */
> -		} last_entry;
> +		} __packed last_entry;
>   	} data[];
> -};
> +} __packed;
>   
>   /*
>    * Value 0 in register_set_hdr_v1 delay field is special.
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index 4be094c9c8..2683e5360c 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -26,12 +26,6 @@
>   #include <sys/mman.h>
>   #include <sys/stat.h>
>   
> -#ifdef __GNUC__
> -#define PACKED __attribute((packed))
> -#else
> -#define PACKED
> -#endif
> -
>   /*
>    * Marvell BootROM UART Sensing
>    */
> @@ -68,7 +62,7 @@ struct kwboot_block {
>   	uint8_t _pnum;
>   	uint8_t data[128];
>   	uint8_t csum;
> -} PACKED;
> +} __packed;
>   
>   #define KWBOOT_BLK_RSP_TIMEO 1000 /* ms */
>   
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage Marek Behún
@ 2021-07-21  9:38   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:38 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Trying to call the following command causes NULL pointer dereference in
> strlen():
>    ./tools/dumpimage -T kwbimage -o /tmp/out u-boot-spl.kwb
> 
> Fix it by checking whether params->imagename is non-NULL before calling
> strlen().
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index f3b16d94ad..5410df63f5 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -1867,7 +1867,7 @@ static int kwbimage_generate(struct image_tool_params *params,
>    */
>   static int kwbimage_check_params(struct image_tool_params *params)
>   {
> -	if (!strlen(params->imagename)) {
> +	if (!params->imagename || !strlen(params->imagename)) {
>   		char *msg = "Configuration file for kwbimage creation omitted";
>   
>   		fprintf(stderr, "Error:%s - %s\n", params->cmdname, msg);
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message when trying to extract data from kwbimage
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message " Marek Behún
@ 2021-07-21  9:39   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:39 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> There is no code for extracting data from kwbimage, so show an error
> message when user tries this via e.g. dumpimage call:
>    ./tools/dumpimage -T kwbimage -o /tmp/out u-boot-spl.kwb
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 5410df63f5..9ecda861e4 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -1867,6 +1867,11 @@ static int kwbimage_generate(struct image_tool_params *params,
>    */
>   static int kwbimage_check_params(struct image_tool_params *params)
>   {
> +	if (params->iflag) {
> +		fprintf(stderr, "%s: kwbimage does not support extract operation\n", params->cmdname);
> +		return CFG_INVALID;
> +	}
> +
>   	if (!params->imagename || !strlen(params->imagename)) {
>   		char *msg = "Configuration file for kwbimage creation omitted";
>   
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version Marek Behún
@ 2021-07-21  9:40   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21  9:40 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Function image_version() returns unsigned value, so it can never be
> negative. Explicitly check for two supported image versions: v0 and v1.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwboot.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index 1d32c1b7ad..7feeaa45a2 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -634,7 +634,7 @@ kwboot_img_patch_hdr(void *img, size_t size)
>   	}
>   
>   	image_ver = image_version(img);
> -	if (image_ver < 0) {
> +	if (image_ver != 0 && image_ver != 1) {
>   		fprintf(stderr, "Invalid image header version\n");
>   		errno = EINVAL;
>   		goto out;
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image Marek Behún
@ 2021-07-21 10:29   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-21 10:29 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Some image types (e.g. kwbimage v1) store the offset to SPL binary and
> offset to main U-Boot binary in their headers. To avoid reading SPL
> binary when loading main U-Boot, add support for specifying offset in
> struct spl_image_info, which defines the offset from the beginning of
> the header and the beginning of the executable data.
> 
> Initial support is added only for SPI, MMC and SATA code. We can extend
> it later if needed.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   common/spl/spl_mmc.c  | 16 +++++++++++++++-
>   common/spl/spl_sata.c | 12 +++++++++++-
>   common/spl/spl_spi.c  |  2 +-
>   include/spl.h         |  1 +
>   4 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
> index add2785b4e..5605f1820d 100644
> --- a/common/spl/spl_mmc.c
> +++ b/common/spl/spl_mmc.c
> @@ -20,26 +20,40 @@
>   static int mmc_load_legacy(struct spl_image_info *spl_image, struct mmc *mmc,
>   			   ulong sector, struct image_header *header)
>   {
> +	u32 image_offset_sectors;
>   	u32 image_size_sectors;
>   	unsigned long count;
> +	u32 image_offset;
>   	int ret;
>   
>   	ret = spl_parse_image_header(spl_image, header);
>   	if (ret)
>   		return ret;
>   
> +	/* convert offset to sectors - round down */
> +	image_offset_sectors = spl_image->offset / mmc->read_bl_len;
> +	/* calculate remaining offset */
> +	image_offset = spl_image->offset % mmc->read_bl_len;
> +
>   	/* convert size to sectors - round up */
>   	image_size_sectors = (spl_image->size + mmc->read_bl_len - 1) /
>   			     mmc->read_bl_len;
>   
>   	/* Read the header too to avoid extra memcpy */
> -	count = blk_dread(mmc_get_blk_desc(mmc), sector, image_size_sectors,
> +	count = blk_dread(mmc_get_blk_desc(mmc),
> +			  sector + image_offset_sectors,
> +			  image_size_sectors,
>   			  (void *)(ulong)spl_image->load_addr);
>   	debug("read %x sectors to %lx\n", image_size_sectors,
>   	      spl_image->load_addr);
>   	if (count != image_size_sectors)
>   		return -EIO;
>   
> +	if (image_offset)
> +		memmove((void *)(ulong)spl_image->load_addr,
> +			(void *)(ulong)spl_image->load_addr + image_offset,
> +			spl_image->size);
> +
>   	return 0;
>   }
>   
> diff --git a/common/spl/spl_sata.c b/common/spl/spl_sata.c
> index e108af0576..535a9219ef 100644
> --- a/common/spl/spl_sata.c
> +++ b/common/spl/spl_sata.c
> @@ -36,6 +36,8 @@ static int spl_sata_load_image_raw(struct spl_image_info *spl_image,
>   	struct image_header *header;
>   	unsigned long count;
>   	u32 image_size_sectors;
> +	u32 image_offset_sectors;
> +	u32 image_offset;
>   	int ret;
>   
>   	header = spl_get_load_buffer(-sizeof(*header), stor_dev->blksz);
> @@ -48,11 +50,19 @@ static int spl_sata_load_image_raw(struct spl_image_info *spl_image,
>   		return ret;
>   
>   	image_size_sectors = DIV_ROUND_UP(spl_image->size, stor_dev->blksz);
> -	count = blk_dread(stor_dev, sector, image_size_sectors,
> +	image_offset_sectors = spl_image->offset / stor_dev->blksz;
> +	image_offset = spl_image->offset % stor_dev->blksz;
> +	count = blk_dread(stor_dev, sector + image_offset_sectors,
> +			image_size_sectors,
>   			(void *)spl_image->load_addr);
>   	if (count != image_size_sectors)
>   		return -EIO;
>   
> +	if (image_offset)
> +		memmove((void *)spl_image->load_addr,
> +			(void *)spl_image->load_addr + image_offset,
> +			spl_image->size);
> +
>   	return 0;
>   }
>   
> diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c
> index 6a4e033287..9884e7c185 100644
> --- a/common/spl/spl_spi.c
> +++ b/common/spl/spl_spi.c
> @@ -159,7 +159,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
>   			err = spl_parse_image_header(spl_image, header);
>   			if (err)
>   				return err;
> -			err = spi_flash_read(flash, payload_offs,
> +			err = spi_flash_read(flash, payload_offs + spl_image->offset,
>   					     spl_image->size,
>   					     (void *)spl_image->load_addr);
>   		}
> diff --git a/include/spl.h b/include/spl.h
> index cee9a42ddb..3df923a813 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -198,6 +198,7 @@ struct spl_image_info {
>   	void *fdt_addr;
>   #endif
>   	u32 boot_device;
> +	u32 offset;
>   	u32 size;
>   	u32 flags;
>   	void *arg;
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size
  2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
                   ` (40 preceding siblings ...)
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image Marek Behún
@ 2021-07-22  7:35 ` Stefan Roese
  41 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  7:35 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton

Hi Marek & Pali,

while building this series via Azure CI I noticed this problem for
controlcenterdc_defconfig:

arm-linux-gnueabi-ld.bfd: common/spl/spl.o: in function `board_init_r':
common/spl/spl.c:702: undefined reference to `spl_board_init'

Could you please fix this? And make sure that all boards (not only
Marvell) compile clean?

And I also had merge issues (patches did not apply) with these patches,
which I needed to fix manually:

[PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of 
secure header under CONFIG_ARMADA_38X
[PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL 
padding to CONFIG_SYS_U_BOOT_OFFS bytes

Please fix this as well while working on v3.

Thanks,
Stefan

On 19.07.21 14:20, Marek Behún wrote:
> Hi Stefan and others,
> 
> this is v2 of the series of improvements to kwboot, kwbimage and mvebu,
> with main motivation the reduction of KWB image size.
> 
> Changes since v1:
> - change of cover letter message + information about boot times added
> - some additional small fix patches are added
> - we do not remove the SPL code for loading U-Boot, but add the option to
>    make BootROM do it. By default SPL code is used to load main U-Boot
>    binary, since it seems to be faster than BootROM (at least on Turris
>    Omnia). If users want to use BootROM for this, they need to disable
>    the necessary media (SPI NOR / NAND / SATA) support in SPL
> 
> This series makes correct usage of BootROM's code for loading U-Boot
> from NOR / NAND: currently, only SPL is read by BootROM and the main
> U-Boot is read by SPL.
> 
> We can use BootROM to also load main U-Boot. This reduces the size of
> the u-boot-spl.bin by about ~7 KiB, since it does not need to contain
> code for reading NOR / NAND. This patch series makes it possible to
> use BootROM for this, but since SPL code may read the main U-Boot
> binary faster, we leave it to board maintainers to decide whether they
> want to use BootROM or SPL code to load the main U-Boot binary. (The
> rule of thumb, I guess, is to use SPL if you have enough space, and
> BootROM if you need the additional 7 KiB.)
> 
> This patch series also reduces the size of the u-boot-spl.kwb binary
> by addutuibak ~29 KiB (depending on board, this is on Turris Omnia),
> by getting rid of the offseting of main U-Boot binary to a specific
> point on the boot device, and instead using information from the
> kwbimage header to find main U-Boot binary.
> 
> On Turris Omnia, the size differences and boot time differences are:
>                    before     after      after with booting via BootROM
>    u-boot-spl.kwb  901632 B   872960 B   864768 B
>    u-boot-spl.bin  115526 B   115898 B   107994 B
>    boot time         2426 ms    2411 ms    3283 ms
> 
> As can be seen, after this patch series, when still loading main U-Boot
> binary via SPL code, the boot time is on Turris Omnia reduced from
> 2426 ms to 2411 ms. When booting via BootROM is preferred, the boot time
> increases to 3283 ms, but we save additional 7 KiB in the u-boot-spl.kwb
> binary.
> 
> Before merging, this series should be tested on as many relevant
> boards as possible. The affected boards are:
> - clearfog
> - controlcenterdc
> - db-88f6720
> - db-88f6820-amc
> - db-88f6820-gp
> - db-mv784mp-gp
> - ds414
> - helios4
> - theadorable_debug
> - turris_omnia
> - x530
> 
> Marek Behún (2):
>    tools: kwbimage: Add constant for SDIO bootfrom
>    tools: kwbimage: Cosmetic fix - remove redundant space character
> 
> Pali Rohár (39):
>    tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS
>    tools: kwbimage: Simplify aligning and calculating checksum
>    tools: kwbimage: Align SPI and NAND images to 256 bytes
>    tools: kwbimage: Fix generation of SATA, SDIO and PCIe images
>    tools: kwbimage: Don't crash when binary file name does not contain
>      '/'
>    tools: kwbimage: Fix check for v0 extended header checksum
>    tools: kwbimage: Validate extended headers of v1 images
>    tools: kwbimage: Validate data checksum of v1 images
>    tools: kwbimage: Print size of binary header in
>      kwbimage_print_header()
>    tools: kwbimage: Use -a parameter (load address) for v1 images
>    tools: kwbimage: Change maximum number of arguments in binary header
>      to 256
>    tools: kwbimage: Fix calculating size of binary header
>    tools: kwbimage: Add support for more BINARY headers
>    tools: kwbimage: Don't parse PAYLOAD keyword
>    tools: kwbimage: Add support for DATA command also for v1 images
>    tools: kwbimage: Add support for a new DATA_DELAY command
>    tools: kwbimage: Do not hide usage of secure header under
>      CONFIG_ARMADA_38X
>    tools: kwbimage: Mark all BootROM structures __packed
>    tools: dumpimage: Fix crashing when trying to extract data from
>      kwbimage
>    tools: dumpimage: Show error message when trying to extract data from
>      kwbimage
>    tools: kwboot: Fix wrong parameter passed to read()
>    tools: kwboot: Fix restoring terminal
>    tools: kwboot: Print trailing newline after terminal is terminated
>    tools: kwboot: Cosmetic fix - add missing curly brackets
>    tools: kwboot: Check for v1 header size
>    tools: kwboot: Fix checking image header version
>    arm: mvebu: Fix return_to_bootrom()
>    arm: mvebu: Mark return_to_bootrom() as a noreturn function
>    arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework
>    arm: mvebu: Use U-Boot's SPL BootROM framework for booting from
>      NAND/UART
>    SPL: Add support for specifying offset between header and image
>    SPL: Add support for parsing board / BootROM specific image types
>    arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage
>      header
>    arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files
>    tools: kwbimage: Remove v1 kwbimage SPL padding to
>      CONFIG_SYS_U_BOOT_OFFS bytes
>    arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS
>    arm: mvebu: gdsys: Remove custom spl_board_init()
>    kwbimage: Add support for extracting images via dumpimage tool
>    kwbimage: Update help message about how to extract from an existing
>      image
> 
>   Makefile                               |   2 +-
>   arch/arm/mach-mvebu/Kconfig            |  26 +-
>   arch/arm/mach-mvebu/include/mach/cpu.h |   2 +-
>   arch/arm/mach-mvebu/lowlevel_spl.S     |   3 +-
>   arch/arm/mach-mvebu/spl.c              | 248 ++++++++++++--
>   board/gdsys/a38x/Makefile              |   2 +-
>   board/gdsys/a38x/spl.c                 |  20 --
>   board/kobol/helios4/Kconfig            |   5 -
>   board/solidrun/clearfog/Kconfig        |   5 -
>   common/spl/Kconfig                     |   4 +-
>   common/spl/spl.c                       |   9 +
>   common/spl/spl_mmc.c                   |  16 +-
>   common/spl/spl_sata.c                  |  12 +-
>   common/spl/spl_spi.c                   |   2 +-
>   configs/clearfog_defconfig             |   1 -
>   configs/controlcenterdc_defconfig      |   1 -
>   configs/db-88f6720_defconfig           |   1 -
>   configs/db-88f6820-amc_defconfig       |   1 -
>   configs/db-88f6820-gp_defconfig        |   2 -
>   configs/db-mv784mp-gp_defconfig        |   1 -
>   configs/ds414_defconfig                |   1 -
>   configs/helios4_defconfig              |   1 -
>   configs/maxbcm_defconfig               |   1 -
>   configs/theadorable_debug_defconfig    |   1 -
>   configs/turris_omnia_defconfig         |   1 -
>   configs/x530_defconfig                 |   1 -
>   include/configs/clearfog.h             |   7 +-
>   include/configs/controlcenterdc.h      |   9 -
>   include/configs/db-88f6720.h           |   3 -
>   include/configs/db-88f6820-amc.h       |   5 -
>   include/configs/db-88f6820-gp.h        |   7 -
>   include/configs/db-mv784mp-gp.h        |   3 -
>   include/configs/ds414.h                |   5 -
>   include/configs/helios4.h              |   7 +-
>   include/configs/theadorable.h          |   3 -
>   include/configs/turris_omnia.h         |   7 -
>   include/configs/x530.h                 |   3 -
>   include/spl.h                          |   1 +
>   scripts/config_whitelist.txt           |   1 -
>   tools/Makefile                         |   8 -
>   tools/kwbimage.c                       | 437 ++++++++++++++++++-------
>   tools/kwbimage.h                       |  54 ++-
>   tools/kwboot.c                         |  24 +-
>   43 files changed, 651 insertions(+), 302 deletions(-)
>   delete mode 100644 board/gdsys/a38x/spl.c
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types Marek Behún
@ 2021-07-22  8:50   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:50 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Platform specific BootROM may use its own image type for loading SPL or
> main U-Boot binary. In some cases it makes sense to not use BootROM
> supplied code for booting main U-Boot binary but rather to use U-Boot SPL
> to load main U-Boot binary, e.g. when U-Boot SPL can load main U-Boot
> binary faster than BootROM. In this case it is required for platform board
> code to parse and load U-Boot in BootROM specific image type.
> 
> This change adds support for parsing platform / board / BootROM specific
> image types via weak function spl_parse_board_header() which is called
> before marking boot image as a raw.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   common/spl/spl.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index eba77cace6..555045eaf2 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -296,6 +296,12 @@ static int spl_load_fit_image(struct spl_image_info *spl_image,
>   }
>   #endif
>   
> +__weak int spl_parse_board_header(struct spl_image_info *spl_image,
> +				  const void *image_header, size_t size)
> +{
> +	return -EINVAL;
> +}
> +
>   __weak int spl_parse_legacy_header(struct spl_image_info *spl_image,
>   				   const struct image_header *header)
>   {
> @@ -348,6 +354,9 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
>   		}
>   #endif
>   
> +		if (!spl_parse_board_header(spl_image, (const void *)header, sizeof(*header)))
> +			return 0;
> +
>   #ifdef CONFIG_SPL_RAW_IMAGE_SUPPORT
>   		/* Signature not found - assume u-boot.bin */
>   		debug("mkimage signature not found - ih_magic = %x\n",
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header Marek Behún
@ 2021-07-22  8:51   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:51 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Now that proper load and execution addresses are set in v1 kwbimage we
> can use it for loading and booting main U-Boot binary.
> 
> Use the new spl_parse_board_header() function to implement parsing the
> kwbimage v1 header. Use information from this header to locate offset and
> size of the main U-Boot binary, instead of using the legacy U-Boot header
> which is prepended to the main U-Boot binary stored at fixed offset. This
> has the advantage that we do not need to relay on legacy U-Boot header
> anymore and therefore main U-Boot binary can be stored at any offset, as
> is the case when loading & booting main U-Boot binary by BootROM.
> The CONFIG_SYS_U_BOOT_OFFS option is therefore not used by SPL code
> anymore.
> 
> Also allow to compile U-Boot SPL without CONFIG_SPL_SPI_FLASH_SUPPORT,
> CONFIG_SPL_MMC_SUPPORT or CONFIG_SPL_SATA_SUPPORT set. In this case
> BootROM is used for loading and executing main U-Boot binary. This
> reduces the size of U-Boot's SPL image. By default these config options
> are enabled and so BootROM loading is not used. In some cases BootROM
> reads from SPI NOR at lower speed than U-Boot SPL. So people can decide
> whether they want to have smaller SPL binary at the cost of slower boot.
> 
> Therefore dependency on CONFIG_SPL_DM_SPI, CONFIG_SPL_SPI_FLASH_SUPPORT,
> CONFIG_SPL_SPI_LOAD, CONFIG_SPL_SPI_SUPPORT, CONFIG_SPL_DM_GPIO,
> CONFIG_SPL_DM_MMC, CONFIG_SPL_GPIO_SUPPORT, CONFIG_SPL_LIBDISK_SUPPORT,
> CONFIG_SPL_MMC_SUPPORT, CONFIG_SPL_SATA_SUPPORT and
> CONFIG_SPL_LIBDISK_SUPPORT is changed from strict to related "imply"
> (which can be selectivelly turned off and causes booting via BootROM).
> 
> Options CONFIG_SYS_SPI_U_BOOT_OFFS,
> CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR and
> CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET have to to be set to
> zero as they define the location where kwbimage header starts. It is the
> location where BootROM expects start of the kwbimage from which it reads,
> parses and executes SPL part. The same applies to option
> CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR, which has to be set to one.
> 
> Update all config files to set correct values of these options and set
> CONFIG_SYS_U_BOOT_OFFS to the correct value - the offset where main
> U-Boot binary starts.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   arch/arm/mach-mvebu/Kconfig         |  22 +--
>   arch/arm/mach-mvebu/spl.c           | 205 ++++++++++++++++++++++++++--
>   board/kobol/helios4/Kconfig         |   5 -
>   board/solidrun/clearfog/Kconfig     |   5 -
>   common/spl/Kconfig                  |   4 +-
>   configs/clearfog_defconfig          |   1 -
>   configs/controlcenterdc_defconfig   |   1 -
>   configs/db-88f6720_defconfig        |   1 -
>   configs/db-88f6820-amc_defconfig    |   1 -
>   configs/db-88f6820-gp_defconfig     |   2 -
>   configs/db-mv784mp-gp_defconfig     |   1 -
>   configs/ds414_defconfig             |   1 -
>   configs/helios4_defconfig           |   1 -
>   configs/maxbcm_defconfig            |   1 -
>   configs/theadorable_debug_defconfig |   1 -
>   configs/turris_omnia_defconfig      |   1 -
>   configs/x530_defconfig              |   1 -
>   include/configs/clearfog.h          |   5 +-
>   include/configs/controlcenterdc.h   |   7 +-
>   include/configs/db-88f6720.h        |   2 +-
>   include/configs/db-88f6820-amc.h    |   2 +-
>   include/configs/db-88f6820-gp.h     |   5 +-
>   include/configs/db-mv784mp-gp.h     |   2 +-
>   include/configs/ds414.h             |   2 +-
>   include/configs/helios4.h           |   5 +-
>   include/configs/theadorable.h       |   2 +-
>   include/configs/turris_omnia.h      |   5 +-
>   include/configs/x530.h              |   2 +-
>   28 files changed, 224 insertions(+), 69 deletions(-)
> 
> diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
> index 2133d9a172..140c4199a2 100644
> --- a/arch/arm/mach-mvebu/Kconfig
> +++ b/arch/arm/mach-mvebu/Kconfig
> @@ -253,27 +253,27 @@ choice
>   config MVEBU_SPL_BOOT_DEVICE_SPI
>   	bool "SPI NOR flash"
>   	imply ENV_IS_IN_SPI_FLASH
> -	select SPL_DM_SPI
> -	select SPL_SPI_FLASH_SUPPORT
> -	select SPL_SPI_LOAD
> -	select SPL_SPI_SUPPORT
> +	imply SPL_DM_SPI
> +	imply SPL_SPI_FLASH_SUPPORT
> +	imply SPL_SPI_LOAD
> +	imply SPL_SPI_SUPPORT
>   	select SPL_BOOTROM_SUPPORT
>   
>   config MVEBU_SPL_BOOT_DEVICE_MMC
>   	bool "SDIO/MMC card"
>   	imply ENV_IS_IN_MMC
>   	# GPIO needed for eMMC/SD card presence detection
> -	select SPL_DM_GPIO
> -	select SPL_DM_MMC
> -	select SPL_GPIO_SUPPORT
> -	select SPL_LIBDISK_SUPPORT
> -	select SPL_MMC_SUPPORT
> +	imply SPL_DM_GPIO
> +	imply SPL_DM_MMC
> +	imply SPL_GPIO_SUPPORT
> +	imply SPL_LIBDISK_SUPPORT
> +	imply SPL_MMC_SUPPORT
>   	select SPL_BOOTROM_SUPPORT
>   
>   config MVEBU_SPL_BOOT_DEVICE_SATA
>   	bool "SATA"
> -	select SPL_SATA_SUPPORT
> -	select SPL_LIBDISK_SUPPORT
> +	imply SPL_SATA_SUPPORT
> +	imply SPL_LIBDISK_SUPPORT
>   	select SPL_BOOTROM_SUPPORT
>   
>   config MVEBU_SPL_BOOT_DEVICE_UART
> diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
> index 5c3d959bff..c2606bc8fb 100644
> --- a/arch/arm/mach-mvebu/spl.c
> +++ b/arch/arm/mach-mvebu/spl.c
> @@ -8,6 +8,7 @@
>   #include <debug_uart.h>
>   #include <fdtdec.h>
>   #include <hang.h>
> +#include <image.h>
>   #include <init.h>
>   #include <log.h>
>   #include <spl.h>
> @@ -16,6 +17,160 @@
>   #include <asm/arch/cpu.h>
>   #include <asm/arch/soc.h>
>   
> +#if defined(CONFIG_SPL_SPI_FLASH_SUPPORT) || defined(CONFIG_SPL_MMC_SUPPORT) || defined(CONFIG_SPL_SATA_SUPPORT)
> +
> +/*
> + * When loading U-Boot via SPL from SPI NOR, CONFIG_SYS_SPI_U_BOOT_OFFS must
> + * point to the offset of kwbimage main header which is always at offset zero
> + * (defined by BootROM). Therefore other values of CONFIG_SYS_SPI_U_BOOT_OFFS
> + * makes U-Boot non-bootable.
> + */
> +#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
> +#if defined(CONFIG_SYS_SPI_U_BOOT_OFFS) && CONFIG_SYS_SPI_U_BOOT_OFFS != 0
> +#error CONFIG_SYS_SPI_U_BOOT_OFFS must be set to 0
> +#endif
> +#endif
> +
> +/*
> + * When loading U-Boot via SPL from eMMC (in Marvell terminology SDIO), the
> + * kwbimage main header is stored at sector 0. U-Boot SPL needs to parse this
> + * header and figure out at which sector the main U-Boot binary is stored.
> + * Partition booting is therefore not supported and CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
> + * and CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET need to point to the
> + * kwbimage main header.
> + */
> +#ifdef CONFIG_SPL_MMC_SUPPORT
> +#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
> +#error CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION is unsupported
> +#endif
> +#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR) && CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR != 0
> +#error CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR must be set to 0
> +#endif
> +#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET) && CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET != 0
> +#error CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET must be set to 0
> +#endif
> +#endif
> +
> +/*
> + * When loading U-Boot via SPL from SATA disk, the kwbimage main header is
> + * stored at sector 1. Therefore CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR must be
> + * set to 1. Otherwise U-Boot SPL would not be able to load main U-Boot binary.
> + */
> +#ifdef CONFIG_SPL_SATA_SUPPORT
> +#if !defined(CONFIG_SPL_SATA_RAW_U_BOOT_USE_SECTOR) || !defined(CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR) || CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR != 1
> +#error CONFIG_SPL_SATA_RAW_U_BOOT_SECTOR must be set to 1
> +#endif
> +#endif
> +
> +/* Boot Type - block ID */
> +#define IBR_HDR_I2C_ID			0x4D
> +#define IBR_HDR_SPI_ID			0x5A
> +#define IBR_HDR_NAND_ID			0x8B
> +#define IBR_HDR_SATA_ID			0x78
> +#define IBR_HDR_PEX_ID			0x9C
> +#define IBR_HDR_UART_ID			0x69
> +#define IBR_HDR_SDIO_ID			0xAE
> +
> +/* Structure of the main header, version 1 (Armada 370/38x/XP) */
> +struct kwbimage_main_hdr_v1 {
> +	uint8_t  blockid;               /* 0x0       */
> +	uint8_t  flags;                 /* 0x1       */
> +	uint16_t reserved2;             /* 0x2-0x3   */
> +	uint32_t blocksize;             /* 0x4-0x7   */
> +	uint8_t  version;               /* 0x8       */
> +	uint8_t  headersz_msb;          /* 0x9       */
> +	uint16_t headersz_lsb;          /* 0xA-0xB   */
> +	uint32_t srcaddr;               /* 0xC-0xF   */
> +	uint32_t destaddr;              /* 0x10-0x13 */
> +	uint32_t execaddr;              /* 0x14-0x17 */
> +	uint8_t  options;               /* 0x18      */
> +	uint8_t  nandblocksize;         /* 0x19      */
> +	uint8_t  nandbadblklocation;    /* 0x1A      */
> +	uint8_t  reserved4;             /* 0x1B      */
> +	uint16_t reserved5;             /* 0x1C-0x1D */
> +	uint8_t  ext;                   /* 0x1E      */
> +	uint8_t  checksum;              /* 0x1F      */
> +} __packed;
> +
> +#ifdef CONFIG_SPL_MMC_SUPPORT
> +u32 spl_mmc_boot_mode(const u32 boot_device)
> +{
> +	return MMCSD_MODE_RAW;
> +}
> +#endif
> +
> +int spl_parse_board_header(struct spl_image_info *spl_image,
> +			   const void *image_header, size_t size)
> +{
> +	const struct kwbimage_main_hdr_v1 *mhdr = image_header;
> +
> +	if (size < sizeof(*mhdr)) {
> +		/* This should be compile time assert */
> +		printf("FATAL ERROR: Image header size is too small\n");
> +		hang();
> +	}
> +
> +	/*
> +	 * Very basic check for image validity. We cannot check mhdr->checksum
> +	 * as it is calculated also from variable length extended headers
> +	 * (including SPL content) which is not included in U-Boot image_header.
> +	 */
> +	if (mhdr->version != 1 ||
> +	    ((mhdr->headersz_msb << 16) | mhdr->headersz_lsb) < sizeof(*mhdr) ||
> +	    (
> +#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
> +	     mhdr->blockid != IBR_HDR_SPI_ID &&
> +#endif
> +#ifdef CONFIG_SPL_SATA_SUPPORT
> +	     mhdr->blockid != IBR_HDR_SATA_ID &&
> +#endif
> +#ifdef CONFIG_SPL_MMC_SUPPORT
> +	     mhdr->blockid != IBR_HDR_SDIO_ID &&
> +#endif
> +	     1
> +	    )) {
> +		printf("ERROR: Not valid SPI/NAND/SATA/SDIO kwbimage v1\n");
> +		return -EINVAL;
> +	}
> +
> +	spl_image->offset = mhdr->srcaddr;
> +
> +#ifdef CONFIG_SPL_SATA_SUPPORT
> +	/*
> +	 * For SATA srcaddr is specified in number of sectors.
> +	 * The main header is must be stored at sector number 1.
> +	 * This expects that sector size is 512 bytes and recalculates
> +	 * data offset to bytes relative to the main header.
> +	 */
> +	if (mhdr->blockid == IBR_HDR_SATA_ID) {
> +		if (spl_image->offset < 1) {
> +			printf("ERROR: Wrong SATA srcaddr in kwbimage\n");
> +			return -EINVAL;
> +		}
> +		spl_image->offset -= 1;
> +		spl_image->offset *= 512;
> +	}
> +#endif
> +
> +#ifdef CONFIG_SPL_MMC_SUPPORT
> +	/*
> +	 * For SDIO (eMMC) srcaddr is specified in number of sectors.
> +	 * This expects that sector size is 512 bytes and recalculates
> +	 * data offset to bytes.
> +	 */
> +	if (mhdr->blockid == IBR_HDR_SDIO_ID)
> +		spl_image->offset *= 512;
> +#endif
> +
> +	spl_image->size = mhdr->blocksize;
> +	spl_image->entry_point = mhdr->execaddr;
> +	spl_image->load_addr = mhdr->destaddr;
> +	spl_image->os = IH_OS_U_BOOT;
> +	spl_image->name = "U-Boot";
> +
> +	return 0;
> +}
> +
>   static u32 get_boot_device(void)
>   {
>   	u32 val;
> @@ -49,11 +204,11 @@ static u32 get_boot_device(void)
>   	boot_device = (val & BOOT_DEV_SEL_MASK) >> BOOT_DEV_SEL_OFFS;
>   	debug("SAR_REG=0x%08x boot_device=0x%x\n", val, boot_device);
>   	switch (boot_device) {
> -#if defined(CONFIG_ARMADA_38X)
> +#ifdef BOOT_FROM_NAND
>   	case BOOT_FROM_NAND:
>   		return BOOT_DEVICE_NAND;
>   #endif
> -#ifdef CONFIG_SPL_MMC_SUPPORT
> +#ifdef BOOT_FROM_MMC
>   	case BOOT_FROM_MMC:
>   	case BOOT_FROM_MMC_ALT:
>   		return BOOT_DEVICE_MMC1;
> @@ -69,15 +224,26 @@ static u32 get_boot_device(void)
>   		return BOOT_DEVICE_SATA;
>   #endif
>   	case BOOT_FROM_SPI:
> -	default:
>   		return BOOT_DEVICE_SPI;
> +	default:
> +		return BOOT_DEVICE_BOOTROM;
>   	};
>   }
>   
> +#else
> +
> +static u32 get_boot_device(void)
> +{
> +	return BOOT_DEVICE_BOOTROM;
> +}
> +
> +#endif
> +
>   u32 spl_boot_device(void)
>   {
>   	u32 boot_device = get_boot_device();
>   
> +	switch (boot_device) {
>   	/*
>   	 * Return to the BootROM to continue the Marvell xmodem
>   	 * UART boot protocol. As initiated by the kwboot tool.
> @@ -87,18 +253,35 @@ u32 spl_boot_device(void)
>   	 * SPL has no chance to receive this information. So we
>   	 * need to return to the BootROM to enable this xmodem
>   	 * UART download. Use SPL infrastructure to return to BootROM.
> -	 *
> -	 * If booting from NAND lets let the BootROM load the
> -	 * rest of the bootloader.
>   	 */
> -	switch (boot_device) {
>   	case BOOT_DEVICE_UART:
> -#if defined(CONFIG_ARMADA_38X)
> -	case BOOT_DEVICE_NAND:
> -#endif
>   		return BOOT_DEVICE_BOOTROM;
> +
> +	/*
> +	 * If SPL is compiled with chosen boot_device support
> +	 * then use SPL driver for loading main U-Boot binary.
> +	 */
> +#ifdef CONFIG_SPL_MMC_SUPPORT
> +	case BOOT_DEVICE_MMC1:
> +		return BOOT_DEVICE_MMC1;
> +#endif
> +#ifdef CONFIG_SPL_SATA_SUPPORT
> +	case BOOT_FROM_SATA:
> +		return BOOT_FROM_SATA;
> +#endif
> +#ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
> +	case BOOT_DEVICE_SPI:
> +		return BOOT_DEVICE_SPI;
> +#endif
> +
> +	/*
> +	 * If SPL is not compiled with chosen boot_device support
> +	 * then return to the BootROM. BootROM supports loading
> +	 * main U-Boot binary from any valid boot_device present
> +	 * in SAR register.
> +	 */
>   	default:
> -		return boot_device;
> +		return BOOT_DEVICE_BOOTROM;
>   	}
>   }
>   
> diff --git a/board/kobol/helios4/Kconfig b/board/kobol/helios4/Kconfig
> index cad51c1cf0..81a2199ae5 100644
> --- a/board/kobol/helios4/Kconfig
> +++ b/board/kobol/helios4/Kconfig
> @@ -16,9 +16,4 @@ config ENV_SECT_SIZE
>   	# Use optimistic 64 KiB erase block, will vary between actual media
>   	default 0x10000 if MVEBU_SPL_BOOT_DEVICE_MMC || MVEBU_SPL_BOOT_DEVICE_UART
>   
> -config SYS_SPI_U_BOOT_OFFS
> -	hex "address of u-boot payload in SPI flash"
> -	default 0x20000
> -	depends on MVEBU_SPL_BOOT_DEVICE_SPI
> -
>   endmenu
> diff --git a/board/solidrun/clearfog/Kconfig b/board/solidrun/clearfog/Kconfig
> index cf95258090..60d3921307 100644
> --- a/board/solidrun/clearfog/Kconfig
> +++ b/board/solidrun/clearfog/Kconfig
> @@ -54,9 +54,4 @@ config ENV_SECT_SIZE
>   	# Use optimistic 64 KiB erase block, will vary between actual media
>   	default 0x10000 if MVEBU_SPL_BOOT_DEVICE_MMC || MVEBU_SPL_BOOT_DEVICE_UART
>   
> -config SYS_SPI_U_BOOT_OFFS
> -	hex "address of u-boot payload in SPI flash"
> -	default 0x20000
> -	depends on MVEBU_SPL_BOOT_DEVICE_SPI
> -
>   endmenu
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index fa80524cfb..a710c8d86c 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -334,7 +334,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
>   	default 0x75 if ARCH_DAVINCI
>   	default 0x8a if ARCH_MX6 || ARCH_MX7
>   	default 0x100 if ARCH_UNIPHIER
> -	default 0x140 if ARCH_MVEBU
> +	default 0x0 if ARCH_MVEBU
>   	default 0x200 if ARCH_SOCFPGA || ARCH_AT91
>   	default 0x300 if ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || OMAP44XX || \
>   		         OMAP54XX || AM33XX || AM43XX || ARCH_K3
> @@ -1089,6 +1089,7 @@ config SPL_SATA_SUPPORT
>   config SPL_SATA_RAW_U_BOOT_USE_SECTOR
>   	bool "SATA raw mode: by sector"
>   	depends on SPL_SATA_SUPPORT
> +	default y if ARCH_MVEBU
>   	help
>   	  Use sector number for specifying U-Boot location on SATA disk in
>   	  raw mode.
> @@ -1096,6 +1097,7 @@ config SPL_SATA_RAW_U_BOOT_USE_SECTOR
>   config SPL_SATA_RAW_U_BOOT_SECTOR
>   	hex "Sector on the SATA disk to load U-Boot from"
>   	depends on SPL_SATA_RAW_U_BOOT_USE_SECTOR
> +	default 0x1 if ARCH_MVEBU
>   	help
>   	  Sector on the SATA disk to load U-Boot from, when the SATA disk is being
>   	  used in raw mode. Units: SATA disk sectors (1 sector = 512 bytes).
> diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig
> index 4702cf2df1..4ece79fe7e 100644
> --- a/configs/clearfog_defconfig
> +++ b/configs/clearfog_defconfig
> @@ -24,7 +24,6 @@ CONFIG_USE_PREBOOT=y
>   CONFIG_SYS_CONSOLE_INFO_QUIET=y
>   # CONFIG_DISPLAY_BOARDINFO is not set
>   CONFIG_DISPLAY_BOARDINFO_LATE=y
> -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET=0x1
>   CONFIG_SPL_I2C_SUPPORT=y
>   CONFIG_CMD_TLV_EEPROM=y
>   CONFIG_SPL_CMD_TLV_EEPROM=y
> diff --git a/configs/controlcenterdc_defconfig b/configs/controlcenterdc_defconfig
> index a8d961a7c5..eccc1d7dfc 100644
> --- a/configs/controlcenterdc_defconfig
> +++ b/configs/controlcenterdc_defconfig
> @@ -9,7 +9,6 @@ CONFIG_TARGET_CONTROLCENTERDC=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x40000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x30000
>   CONFIG_DM_GPIO=y
>   CONFIG_DEFAULT_DEVICE_TREE="armada-38x-controlcenterdc"
>   CONFIG_SPL_TEXT_BASE=0x40000030
> diff --git a/configs/db-88f6720_defconfig b/configs/db-88f6720_defconfig
> index bb73635d92..479a110252 100644
> --- a/configs/db-88f6720_defconfig
> +++ b/configs/db-88f6720_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_DB_88F6720=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x10000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
>   CONFIG_DEFAULT_DEVICE_TREE="armada-375-db"
>   CONFIG_SPL_TEXT_BASE=0x40004030
>   CONFIG_SPL_SERIAL_SUPPORT=y
> diff --git a/configs/db-88f6820-amc_defconfig b/configs/db-88f6820-amc_defconfig
> index a7c8498599..7cc838a148 100644
> --- a/configs/db-88f6820-amc_defconfig
> +++ b/configs/db-88f6820-amc_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_DB_88F6820_AMC=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x40000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
>   CONFIG_DEFAULT_DEVICE_TREE="armada-385-db-88f6820-amc"
>   CONFIG_SPL_TEXT_BASE=0x40000030
>   CONFIG_SPL_SERIAL_SUPPORT=y
> diff --git a/configs/db-88f6820-gp_defconfig b/configs/db-88f6820-gp_defconfig
> index 6fa00d1a17..cdc6cabaf6 100644
> --- a/configs/db-88f6820-gp_defconfig
> +++ b/configs/db-88f6820-gp_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_DB_88F6820_GP=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x40000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
>   CONFIG_DEFAULT_DEVICE_TREE="armada-388-gp"
>   CONFIG_SPL_TEXT_BASE=0x40000030
>   CONFIG_SPL_SERIAL_SUPPORT=y
> @@ -24,7 +23,6 @@ CONFIG_USE_PREBOOT=y
>   CONFIG_SYS_CONSOLE_INFO_QUIET=y
>   # CONFIG_DISPLAY_BOARDINFO is not set
>   CONFIG_DISPLAY_BOARDINFO_LATE=y
> -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
>   CONFIG_SPL_I2C_SUPPORT=y
>   CONFIG_CMD_I2C=y
>   CONFIG_CMD_MMC=y
> diff --git a/configs/db-mv784mp-gp_defconfig b/configs/db-mv784mp-gp_defconfig
> index e1f6aff8f5..1f5c987cfd 100644
> --- a/configs/db-mv784mp-gp_defconfig
> +++ b/configs/db-mv784mp-gp_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_DB_MV784MP_GP=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x10000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
>   CONFIG_DEFAULT_DEVICE_TREE="armada-xp-gp"
>   CONFIG_SPL_TEXT_BASE=0x40004030
>   CONFIG_SPL_SERIAL_SUPPORT=y
> diff --git a/configs/ds414_defconfig b/configs/ds414_defconfig
> index b8a0bd09d4..cf0d937295 100644
> --- a/configs/ds414_defconfig
> +++ b/configs/ds414_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_DS414=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x7E0000
>   CONFIG_ENV_SECT_SIZE=0x10000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
>   CONFIG_DEFAULT_DEVICE_TREE="armada-xp-synology-ds414"
>   CONFIG_SPL_TEXT_BASE=0x40004030
>   CONFIG_SPL_SERIAL_SUPPORT=y
> diff --git a/configs/helios4_defconfig b/configs/helios4_defconfig
> index 202e57344d..4026dd4b89 100644
> --- a/configs/helios4_defconfig
> +++ b/configs/helios4_defconfig
> @@ -24,7 +24,6 @@ CONFIG_USE_PREBOOT=y
>   CONFIG_SYS_CONSOLE_INFO_QUIET=y
>   # CONFIG_DISPLAY_BOARDINFO is not set
>   CONFIG_DISPLAY_BOARDINFO_LATE=y
> -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET=0x1
>   CONFIG_SPL_I2C_SUPPORT=y
>   CONFIG_CMD_TLV_EEPROM=y
>   CONFIG_SPL_CMD_TLV_EEPROM=y
> diff --git a/configs/maxbcm_defconfig b/configs/maxbcm_defconfig
> index e754108b73..4bcac91057 100644
> --- a/configs/maxbcm_defconfig
> +++ b/configs/maxbcm_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_MAXBCM=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x10000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x20000
>   CONFIG_DEFAULT_DEVICE_TREE="armada-xp-maxbcm"
>   CONFIG_SPL_TEXT_BASE=0x40004030
>   CONFIG_SPL_SERIAL_SUPPORT=y
> diff --git a/configs/theadorable_debug_defconfig b/configs/theadorable_debug_defconfig
> index 6d32e6c5be..a479ac7748 100644
> --- a/configs/theadorable_debug_defconfig
> +++ b/configs/theadorable_debug_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_THEADORABLE=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x40000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x1a000
>   CONFIG_DM_GPIO=y
>   CONFIG_DEFAULT_DEVICE_TREE="armada-xp-theadorable"
>   CONFIG_SPL_TEXT_BASE=0x40004030
> diff --git a/configs/turris_omnia_defconfig b/configs/turris_omnia_defconfig
> index 5f7b1a67a2..9eec70e8a8 100644
> --- a/configs/turris_omnia_defconfig
> +++ b/configs/turris_omnia_defconfig
> @@ -14,7 +14,6 @@ CONFIG_TARGET_TURRIS_OMNIA=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0xF0000
>   CONFIG_ENV_SECT_SIZE=0x10000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
>   CONFIG_DM_GPIO=y
>   CONFIG_DEFAULT_DEVICE_TREE="armada-385-turris-omnia"
>   CONFIG_SPL_TEXT_BASE=0x40000030
> diff --git a/configs/x530_defconfig b/configs/x530_defconfig
> index dbde392374..49610eda24 100644
> --- a/configs/x530_defconfig
> +++ b/configs/x530_defconfig
> @@ -10,7 +10,6 @@ CONFIG_TARGET_X530=y
>   CONFIG_ENV_SIZE=0x10000
>   CONFIG_ENV_OFFSET=0x100000
>   CONFIG_ENV_SECT_SIZE=0x40000
> -CONFIG_SYS_SPI_U_BOOT_OFFS=0x24000
>   CONFIG_DM_GPIO=y
>   CONFIG_DEFAULT_DEVICE_TREE="armada-385-atl-x530"
>   CONFIG_SPL_TEXT_BASE=0x40000030
> diff --git a/include/configs/clearfog.h b/include/configs/clearfog.h
> index c9852a72b9..255b147945 100644
> --- a/include/configs/clearfog.h
> +++ b/include/configs/clearfog.h
> @@ -71,11 +71,10 @@
>   
>   #if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x20000
>   #elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
>   /* SPL related MMC defines */
> -#define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
> -#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/controlcenterdc.h b/include/configs/controlcenterdc.h
> index 869b94bc9b..fffc372872 100644
> --- a/include/configs/controlcenterdc.h
> +++ b/include/configs/controlcenterdc.h
> @@ -87,16 +87,13 @@
>   
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x30000
>   #endif
>   
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
>   /* SPL related MMC defines */
>   #define CONFIG_SPL_MMC_SUPPORT
> -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION 1
> -#define CONFIG_SYS_MMC_U_BOOT_OFFS		(168 << 10)
> -#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
> -#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR	(CONFIG_SYS_U_BOOT_OFFS / 512)
> +#define CONFIG_SYS_U_BOOT_OFFS			(168 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/db-88f6720.h b/include/configs/db-88f6720.h
> index 213883ef0f..14c0190375 100644
> --- a/include/configs/db-88f6720.h
> +++ b/include/configs/db-88f6720.h
> @@ -66,6 +66,6 @@
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x20000
>   
>   #endif /* _CONFIG_DB_88F6720_H */
> diff --git a/include/configs/db-88f6820-amc.h b/include/configs/db-88f6820-amc.h
> index fe9a7ab563..3cd1ff899a 100644
> --- a/include/configs/db-88f6820-amc.h
> +++ b/include/configs/db-88f6820-amc.h
> @@ -61,7 +61,7 @@
>   
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x24000
>   #endif
>   
>   /*
> diff --git a/include/configs/db-88f6820-gp.h b/include/configs/db-88f6820-gp.h
> index ed851bc670..5e43191e8e 100644
> --- a/include/configs/db-88f6820-gp.h
> +++ b/include/configs/db-88f6820-gp.h
> @@ -73,13 +73,12 @@
>   
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x24000
>   #endif
>   
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
>   /* SPL related MMC defines */
> -#define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
> -#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/db-mv784mp-gp.h b/include/configs/db-mv784mp-gp.h
> index 3e20516e94..990fcec129 100644
> --- a/include/configs/db-mv784mp-gp.h
> +++ b/include/configs/db-mv784mp-gp.h
> @@ -79,7 +79,7 @@
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x20000
>   
>   /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
>   #define CONFIG_SPD_EEPROM		0x4e
> diff --git a/include/configs/ds414.h b/include/configs/ds414.h
> index c8b45066cc..b34da334e2 100644
> --- a/include/configs/ds414.h
> +++ b/include/configs/ds414.h
> @@ -70,7 +70,7 @@
>   
>   #if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x24000
>   #endif
>   
>   /* DS414 bus width is 32bits */
> diff --git a/include/configs/helios4.h b/include/configs/helios4.h
> index 2cda05c85a..3875377971 100644
> --- a/include/configs/helios4.h
> +++ b/include/configs/helios4.h
> @@ -71,11 +71,10 @@
>   
>   #if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x20000
>   #elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
>   /* SPL related MMC defines */
> -#define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
> -#define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h
> index 587b134a1b..bfe135da6b 100644
> --- a/include/configs/theadorable.h
> +++ b/include/configs/theadorable.h
> @@ -94,7 +94,7 @@
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x1a000
>   
>   /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
>   #define CONFIG_DDR_FIXED_SIZE		(2 << 20)	/* 2GiB */
> diff --git a/include/configs/turris_omnia.h b/include/configs/turris_omnia.h
> index 7da18f97db..49ee7a7af5 100644
> --- a/include/configs/turris_omnia.h
> +++ b/include/configs/turris_omnia.h
> @@ -47,13 +47,12 @@
>   
>   #ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI
>   /* SPL related SPI defines */
> -# define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +# define CONFIG_SYS_U_BOOT_OFFS		0x24000
>   #endif
>   
>   #ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC
>   /* SPL related MMC defines */
> -# define CONFIG_SYS_MMC_U_BOOT_OFFS		(160 << 10)
> -# define CONFIG_SYS_U_BOOT_OFFS			CONFIG_SYS_MMC_U_BOOT_OFFS
> +# define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   # ifdef CONFIG_SPL_BUILD
>   #  define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   # endif
> diff --git a/include/configs/x530.h b/include/configs/x530.h
> index 4446510df4..25b259832a 100644
> --- a/include/configs/x530.h
> +++ b/include/configs/x530.h
> @@ -98,6 +98,6 @@
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
>   /* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		CONFIG_SYS_SPI_U_BOOT_OFFS
> +#define CONFIG_SYS_U_BOOT_OFFS		0x24000
>   
>   #endif /* _CONFIG_X530_H */
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files
  2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files Marek Behún
@ 2021-07-22  8:52   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:52 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The SPL code now already parses kwbimage v1 headers where all necessary
> information about how to load and execute main U-Boot is present. The
> legacy 64-byte U-Boot header is not used anymore.
> 
> Remove this 64-byte header by putting u-boot.bin binary (instead of
> u-boot.img) into kwbimage v1 and let SPL code or BootROM to load U-Boot
> directly at its execution address.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   Makefile | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index a5a9aef175..6b521573e6 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1405,7 +1405,7 @@ MKIMAGEFLAGS_u-boot.kwb = -n $(KWD_CONFIG_FILE) \
>   	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
>   
>   MKIMAGEFLAGS_u-boot-spl.kwb = -n $(KWD_CONFIG_FILE) \
> -	-T kwbimage -a $(shell printf "0x%x" $$(($(CONFIG_SYS_TEXT_BASE)-64))) -e $(CONFIG_SYS_TEXT_BASE) \
> +	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
>   	$(if $(KEYDIR),-k $(KEYDIR))
>   
>   MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
> @@ -1448,7 +1448,7 @@ u-boot.itb: u-boot-nodtb.bin \
>   	$(BOARD_SIZE_CHECK)
>   endif
>   
> -u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
> +u-boot-spl.kwb: u-boot.bin spl/u-boot-spl.bin FORCE
>   	$(call if_changed,mkimage)
>   
>   u-boot.sha1:	u-boot.bin
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes Marek Behún
@ 2021-07-22  8:52   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:52 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:21, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> This padding depends on board config file and therefore it makes the
> mkimage binary tool board specific, which is not correct. One cannot use
> mkimage tool built as a result for board A to generate images for board
> B, even if both A and B are on the same platform.
> 
> This CONFIG_SYS_U_BOOT_OFFS padding was needed when kwbimage v1 contained
> SPL code which loaded main U-Boot binary based on CONFIG_SYS_U_BOOT_OFFS,
> instead of reading correct offset from kwbimage header.
> 
> Now that SPL code parses kwbimage header and deterinate correct offset,
> there is no need for this CONFIG_SYS_U_BOOT_OFFS padding anymore.
> 
> By removing it we also reduce the size of SPL code and therefore also
> decrease the final size of v1 kwbimage. This means there is more space
> for main U-Boot binary.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/Makefile   |  4 ----
>   tools/kwbimage.c | 13 -------------
>   2 files changed, 17 deletions(-)
> 
> diff --git a/tools/Makefile b/tools/Makefile
> index 7c27069c86..11a5a15bc2 100644
> --- a/tools/Makefile
> +++ b/tools/Makefile
> @@ -155,10 +155,6 @@ ifdef CONFIG_FIT_CIPHER
>   HOST_EXTRACFLAGS	+= -DCONFIG_FIT_CIPHER
>   endif
>   
> -ifneq ($(CONFIG_SYS_U_BOOT_OFFS),)
> -HOSTCFLAGS_kwbimage.o += -DCONFIG_SYS_U_BOOT_OFFS=$(CONFIG_SYS_U_BOOT_OFFS)
> -endif
> -
>   # MXSImage needs LibSSL
>   ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_FIT_SIGNATURE)$(CONFIG_FIT_CIPHER),)
>   HOSTCFLAGS_kwbimage.o += \
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 9ecda861e4..ccb0b92266 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -979,19 +979,6 @@ static size_t image_headersz_v1(int *hasext)
>   			*hasext = 1;
>   	}
>   
> -#if defined(CONFIG_SYS_U_BOOT_OFFS)
> -	if (headersz > CONFIG_SYS_U_BOOT_OFFS) {
> -		fprintf(stderr,
> -			"Error: Image header (incl. SPL image) too big!\n");
> -		fprintf(stderr, "header=0x%x CONFIG_SYS_U_BOOT_OFFS=0x%x!\n",
> -			(int)headersz, CONFIG_SYS_U_BOOT_OFFS);
> -		fprintf(stderr, "Increase CONFIG_SYS_U_BOOT_OFFS!\n");
> -		return 0;
> -	}
> -
> -	headersz = CONFIG_SYS_U_BOOT_OFFS;
> -#endif
> -
>   	/*
>   	 * The payload should be aligned on some reasonable
>   	 * boundary
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS Marek Behún
@ 2021-07-22  8:53   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:53 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:21, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Macro CONFIG_SYS_U_BOOT_OFFS is set but not used anymore. Remove it.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   include/configs/clearfog.h        | 6 +-----
>   include/configs/controlcenterdc.h | 6 ------
>   include/configs/db-88f6720.h      | 3 ---
>   include/configs/db-88f6820-amc.h  | 5 -----
>   include/configs/db-88f6820-gp.h   | 6 ------
>   include/configs/db-mv784mp-gp.h   | 3 ---
>   include/configs/ds414.h           | 5 -----
>   include/configs/helios4.h         | 6 +-----
>   include/configs/theadorable.h     | 3 ---
>   include/configs/turris_omnia.h    | 6 ------
>   include/configs/x530.h            | 3 ---
>   scripts/config_whitelist.txt      | 1 -
>   12 files changed, 2 insertions(+), 51 deletions(-)
> 
> diff --git a/include/configs/clearfog.h b/include/configs/clearfog.h
> index 255b147945..fbdd2f0a24 100644
> --- a/include/configs/clearfog.h
> +++ b/include/configs/clearfog.h
> @@ -69,12 +69,8 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x20000
> -#elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
> +#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
>   /* SPL related MMC defines */
> -#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/controlcenterdc.h b/include/configs/controlcenterdc.h
> index fffc372872..e81d05aa2e 100644
> --- a/include/configs/controlcenterdc.h
> +++ b/include/configs/controlcenterdc.h
> @@ -85,15 +85,9 @@
>   #define CONFIG_SPL_LIBGENERIC_SUPPORT
>   #define CONFIG_SPL_I2C_SUPPORT
>   
> -#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x30000
> -#endif
> -
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
>   /* SPL related MMC defines */
>   #define CONFIG_SPL_MMC_SUPPORT
> -#define CONFIG_SYS_U_BOOT_OFFS			(168 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/db-88f6720.h b/include/configs/db-88f6720.h
> index 14c0190375..cbb9270f93 100644
> --- a/include/configs/db-88f6720.h
> +++ b/include/configs/db-88f6720.h
> @@ -65,7 +65,4 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x20000
> -
>   #endif /* _CONFIG_DB_88F6720_H */
> diff --git a/include/configs/db-88f6820-amc.h b/include/configs/db-88f6820-amc.h
> index 3cd1ff899a..757fbc0b9b 100644
> --- a/include/configs/db-88f6820-amc.h
> +++ b/include/configs/db-88f6820-amc.h
> @@ -59,11 +59,6 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x24000
> -#endif
> -
>   /*
>    * mv-common.h should be defined after CMD configs since it used them
>    * to enable certain macros
> diff --git a/include/configs/db-88f6820-gp.h b/include/configs/db-88f6820-gp.h
> index 5e43191e8e..d50eb2c120 100644
> --- a/include/configs/db-88f6820-gp.h
> +++ b/include/configs/db-88f6820-gp.h
> @@ -71,14 +71,8 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x24000
> -#endif
> -
>   #if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SDIO_MMC_CARD
>   /* SPL related MMC defines */
> -#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/db-mv784mp-gp.h b/include/configs/db-mv784mp-gp.h
> index 990fcec129..ef7eebd081 100644
> --- a/include/configs/db-mv784mp-gp.h
> +++ b/include/configs/db-mv784mp-gp.h
> @@ -78,9 +78,6 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x20000
> -
>   /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
>   #define CONFIG_SPD_EEPROM		0x4e
>   #define CONFIG_BOARD_ECC_SUPPORT	/* this board supports ECC */
> diff --git a/include/configs/ds414.h b/include/configs/ds414.h
> index b34da334e2..4bbb244fa2 100644
> --- a/include/configs/ds414.h
> +++ b/include/configs/ds414.h
> @@ -68,11 +68,6 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x24000
> -#endif
> -
>   /* DS414 bus width is 32bits */
>   #define CONFIG_DDR_32BIT
>   
> diff --git a/include/configs/helios4.h b/include/configs/helios4.h
> index 3875377971..1368080f03 100644
> --- a/include/configs/helios4.h
> +++ b/include/configs/helios4.h
> @@ -69,12 +69,8 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI)
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x20000
> -#elif defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
> +#if defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC) || defined(CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA)
>   /* SPL related MMC defines */
> -#define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   #ifdef CONFIG_SPL_BUILD
>   #define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   #endif
> diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h
> index bfe135da6b..31852fb248 100644
> --- a/include/configs/theadorable.h
> +++ b/include/configs/theadorable.h
> @@ -93,9 +93,6 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x1a000
> -
>   /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */
>   #define CONFIG_DDR_FIXED_SIZE		(2 << 20)	/* 2GiB */
>   
> diff --git a/include/configs/turris_omnia.h b/include/configs/turris_omnia.h
> index 49ee7a7af5..0a824b7939 100644
> --- a/include/configs/turris_omnia.h
> +++ b/include/configs/turris_omnia.h
> @@ -45,14 +45,8 @@
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   #define CONFIG_SPL_DRIVERS_MISC_SUPPORT
>   
> -#ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_SPI
> -/* SPL related SPI defines */
> -# define CONFIG_SYS_U_BOOT_OFFS		0x24000
> -#endif
> -
>   #ifdef CONFIG_MVEBU_SPL_BOOT_DEVICE_MMC
>   /* SPL related MMC defines */
> -# define CONFIG_SYS_U_BOOT_OFFS			(160 << 10)
>   # ifdef CONFIG_SPL_BUILD
>   #  define CONFIG_FIXED_SDHCI_ALIGNED_BUFFER	0x00180000	/* in SDRAM */
>   # endif
> diff --git a/include/configs/x530.h b/include/configs/x530.h
> index 25b259832a..515c6e7ff4 100644
> --- a/include/configs/x530.h
> +++ b/include/configs/x530.h
> @@ -97,7 +97,4 @@
>   #define CONFIG_SPL_STACK		(0x40000000 + ((192 - 16) << 10))
>   #define CONFIG_SPL_BOOTROM_SAVE		(CONFIG_SPL_STACK + 4)
>   
> -/* SPL related SPI defines */
> -#define CONFIG_SYS_U_BOOT_OFFS		0x24000
> -
>   #endif /* _CONFIG_X530_H */
> diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
> index 042ca116e9..1f88212625 100644
> --- a/scripts/config_whitelist.txt
> +++ b/scripts/config_whitelist.txt
> @@ -3301,7 +3301,6 @@ CONFIG_SYS_USE_NAND
>   CONFIG_SYS_USE_NANDFLASH
>   CONFIG_SYS_USE_NORFLASH
>   CONFIG_SYS_USR_EXCEP
> -CONFIG_SYS_U_BOOT_OFFS
>   CONFIG_SYS_VCXK_ACKNOWLEDGE_DDR
>   CONFIG_SYS_VCXK_ACKNOWLEDGE_PIN
>   CONFIG_SYS_VCXK_ACKNOWLEDGE_PORT
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init()
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init() Marek Behún
@ 2021-07-22  8:55   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:55 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham, Mario Six
  Cc: Dennis Gilmore, Jon Nettleton, Pali Rohár

Hi Mario,

On 19.07.21 14:21, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Now it is possible to use BootROM to load and boot main U-Boot binary. It
> is just required to disable config option CONFIG_SPL_SPI_FLASH_SUPPORT.
> 
> gdsys a38x config file (controlcenterdc_defconfig) does not have that
> option enabled so there is no need to provide custom spl_board_init()
> function which calls return_to_bootrom().
> 
> Remove it.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>
> Reviewed-by: Chris Packham <judge.packham@gmail.com>

Mario, could you please do some tests on your Marvell platforms with
this series?

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   board/gdsys/a38x/Makefile |  2 +-
>   board/gdsys/a38x/spl.c    | 20 --------------------
>   2 files changed, 1 insertion(+), 21 deletions(-)
>   delete mode 100644 board/gdsys/a38x/spl.c
> 
> diff --git a/board/gdsys/a38x/Makefile b/board/gdsys/a38x/Makefile
> index 32fffab467..4b13859fed 100644
> --- a/board/gdsys/a38x/Makefile
> +++ b/board/gdsys/a38x/Makefile
> @@ -4,7 +4,7 @@
>   # Copyright (C) 2015 Reinhard Pfau <reinhard.pfau@gdsys.cc>
>   # Copyright (C) 2016 Mario Six <mario.six@gdsys.cc>
>   
> -obj-$(CONFIG_TARGET_CONTROLCENTERDC) += controlcenterdc.o hre.o spl.o keyprogram.o dt_helpers.o
> +obj-$(CONFIG_TARGET_CONTROLCENTERDC) += controlcenterdc.o hre.o keyprogram.o dt_helpers.o
>   
>   ifeq ($(CONFIG_SPL_BUILD),)
>   obj-$(CONFIG_TARGET_CONTROLCENTERDC) += hydra.o ihs_phys.o
> diff --git a/board/gdsys/a38x/spl.c b/board/gdsys/a38x/spl.c
> deleted file mode 100644
> index 84864d1974..0000000000
> --- a/board/gdsys/a38x/spl.c
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * (C) Copyright 2016
> - * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
> - */
> -
> -#include <common.h>
> -#include <config.h>
> -#include <asm/arch/cpu.h>
> -
> -void spl_board_init(void)
> -{
> -#if CONFIG_SPL_BOOT_DEVICE == SPL_BOOT_SPI_NOR_FLASH
> -	u32 *bootrom_save = (u32 *)CONFIG_SPL_BOOTROM_SAVE;
> -	u32 *regs = (u32 *)(*bootrom_save);
> -
> -	printf("Returning to BootROM (return address %08x)...\n", regs[13]);
> -	return_to_bootrom();
> -#endif
> -}
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool Marek Behún
@ 2021-07-22  8:55   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:55 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:21, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> The kwbimage library does not support extracting subimages. Implement it.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 72 ++++++++++++++++++++++++++++++++++++++++++------
>   1 file changed, 64 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index ccb0b92266..5665198db0 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -1849,17 +1849,73 @@ static int kwbimage_generate(struct image_tool_params *params,
>   		return 4 + (4 - s.st_size % 4) % 4;
>   }
>   
> +static int kwbimage_extract_subimage(void *ptr, struct image_tool_params *params)
> +{
> +	struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr;
> +	size_t header_size = kwbimage_header_size(ptr);
> +	int idx = params->pflag;
> +	int cur_idx = 0;
> +	uint32_t offset;
> +	ulong image;
> +	ulong size;
> +
> +	if (image_version((void *)ptr) == 1 && (mhdr->ext & 0x1)) {
> +		struct opt_hdr_v1 *ohdr = (struct opt_hdr_v1 *)
> +					  ((uint8_t *)ptr +
> +					   sizeof(*mhdr));
> +
> +		while (1) {
> +			uint32_t ohdr_size = (ohdr->headersz_msb << 16) |
> +					     le16_to_cpu(ohdr->headersz_lsb);
> +
> +			if (ohdr->headertype == OPT_HDR_V1_BINARY_TYPE) {
> +				if (idx == cur_idx) {
> +					image = (ulong)&ohdr->data[4 +
> +					         4 * ohdr->data[0]];
> +					size = ohdr_size - 12 -
> +					       4 * ohdr->data[0];
> +					goto extract;
> +				}
> +				++cur_idx;
> +			}
> +			if (!(*((uint8_t *)ohdr + ohdr_size - 4) & 0x1))
> +				break;
> +			ohdr = (struct opt_hdr_v1 *)((uint8_t *)ohdr +
> +						     ohdr_size);
> +		}
> +	}
> +
> +	if (idx != cur_idx) {
> +		printf("Image %d is not present\n", idx);
> +		return -1;
> +	}
> +
> +	offset = le32_to_cpu(mhdr->srcaddr);
> +
> +	if (mhdr->blockid == IBR_HDR_SATA_ID) {
> +		offset -= 1;
> +		offset *= 512;
> +	}
> +
> +	if (mhdr->blockid == IBR_HDR_SDIO_ID)
> +		offset *= 512;
> +
> +	if (mhdr->blockid == IBR_HDR_PEX_ID && offset == 0xFFFFFFFF)
> +		offset = header_size;
> +
> +	image = (ulong)((uint8_t *)ptr + offset);
> +	size = le32_to_cpu(mhdr->blocksize) - 4;
> +
> +extract:
> +	return imagetool_save_subimage(params->outfile, image, size);
> +}
> +
>   /*
>    * Report Error if xflag is set in addition to default
>    */
>   static int kwbimage_check_params(struct image_tool_params *params)
>   {
> -	if (params->iflag) {
> -		fprintf(stderr, "%s: kwbimage does not support extract operation\n", params->cmdname);
> -		return CFG_INVALID;
> -	}
> -
> -	if (!params->imagename || !strlen(params->imagename)) {
> +	if (!params->iflag && (!params->imagename || !strlen(params->imagename))) {
>   		char *msg = "Configuration file for kwbimage creation omitted";
>   
>   		fprintf(stderr, "Error:%s - %s\n", params->cmdname, msg);
> @@ -1869,7 +1925,7 @@ static int kwbimage_check_params(struct image_tool_params *params)
>   	return (params->dflag && (params->fflag || params->lflag)) ||
>   		(params->fflag && (params->dflag || params->lflag)) ||
>   		(params->lflag && (params->dflag || params->fflag)) ||
> -		(params->xflag) || !(strlen(params->imagename));
> +		(params->xflag);
>   }
>   
>   /*
> @@ -1884,7 +1940,7 @@ U_BOOT_IMAGE_TYPE(
>   	kwbimage_verify_header,
>   	kwbimage_print_header,
>   	kwbimage_set_header,
> -	NULL,
> +	kwbimage_extract_subimage,
>   	kwbimage_check_image_types,
>   	NULL,
>   	kwbimage_generate
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

* Re: [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image
  2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image Marek Behún
@ 2021-07-22  8:56   ` Stefan Roese
  0 siblings, 0 replies; 65+ messages in thread
From: Stefan Roese @ 2021-07-22  8:56 UTC (permalink / raw)
  To: Marek Behún, u-boot, Chris Packham, Baruch Siach,
	Dirk Eibach, Chris Packham
  Cc: Dennis Gilmore, Mario Six, Jon Nettleton, Pali Rohár

On 19.07.21 14:21, Marek Behún wrote:
> From: Pali Rohár <pali@kernel.org>
> 
> Extracting is now supported by dumpimage, so mention it in help instead
> of `kwbimage -x`.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>
> Reviewed-by: Marek Behún <marek.behun@nic.cz>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index 5665198db0..00cb338d64 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -961,7 +961,7 @@ static size_t image_headersz_v1(int *hasext)
>   			fprintf(stderr,
>   				"Didn't find the file '%s' in '%s' which is mandatory to generate the image\n"
>   				"This file generally contains the DDR3 training code, and should be extracted from an existing bootable\n"
> -				"image for your board. See 'kwbimage -x' to extract it from an existing image.\n",
> +				"image for your board. Use 'dumpimage -T kwbimage -p 0' to extract it from an existing image.\n",
>   				binarye->binary.file, dir);
>   			return 0;
>   		}
> 


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

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

end of thread, other threads:[~2021-07-22  8:56 UTC | newest]

Thread overview: 65+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-19 12:20 [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 01/41] tools: kwbimage: Fix compilation without CONFIG_SYS_U_BOOT_OFFS Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 02/41] tools: kwbimage: Simplify aligning and calculating checksum Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 03/41] tools: kwbimage: Align SPI and NAND images to 256 bytes Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 04/41] tools: kwbimage: Add constant for SDIO bootfrom Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 05/41] tools: kwbimage: Fix generation of SATA, SDIO and PCIe images Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 06/41] tools: kwbimage: Don't crash when binary file name does not contain '/' Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 07/41] tools: kwbimage: Fix check for v0 extended header checksum Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 08/41] tools: kwbimage: Validate extended headers of v1 images Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 09/41] tools: kwbimage: Validate data checksum " Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 10/41] tools: kwbimage: Print size of binary header in kwbimage_print_header() Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 11/41] tools: kwbimage: Cosmetic fix - remove redundant space character Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 12/41] tools: kwbimage: Use -a parameter (load address) for v1 images Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 13/41] tools: kwbimage: Change maximum number of arguments in binary header to 256 Marek Behún
2021-07-21  9:31   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 14/41] tools: kwbimage: Fix calculating size of binary header Marek Behún
2021-07-21  9:32   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 15/41] tools: kwbimage: Add support for more BINARY headers Marek Behún
2021-07-21  9:32   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 16/41] tools: kwbimage: Don't parse PAYLOAD keyword Marek Behún
2021-07-21  9:33   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 17/41] tools: kwbimage: Add support for DATA command also for v1 images Marek Behún
2021-07-21  9:35   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 18/41] tools: kwbimage: Add support for a new DATA_DELAY command Marek Behún
2021-07-21  9:35   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 19/41] tools: kwbimage: Do not hide usage of secure header under CONFIG_ARMADA_38X Marek Behún
2021-07-19 12:50   ` Marek Behún
2021-07-19 12:52     ` Stefan Roese
2021-07-21  9:36   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed Marek Behún
2021-07-21  9:38   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 21/41] tools: dumpimage: Fix crashing when trying to extract data from kwbimage Marek Behún
2021-07-21  9:38   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 22/41] tools: dumpimage: Show error message " Marek Behún
2021-07-21  9:39   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 23/41] tools: kwboot: Fix wrong parameter passed to read() Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 24/41] tools: kwboot: Fix restoring terminal Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 25/41] tools: kwboot: Print trailing newline after terminal is terminated Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 26/41] tools: kwboot: Cosmetic fix - add missing curly brackets Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 27/41] tools: kwboot: Check for v1 header size Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 28/41] tools: kwboot: Fix checking image header version Marek Behún
2021-07-21  9:40   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 29/41] arm: mvebu: Fix return_to_bootrom() Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 30/41] arm: mvebu: Mark return_to_bootrom() as a noreturn function Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 31/41] arm: mvebu: Implement return_to_bootrom() via U-Boot's SPL framework Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 32/41] arm: mvebu: Use U-Boot's SPL BootROM framework for booting from NAND/UART Marek Behún
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 33/41] SPL: Add support for specifying offset between header and image Marek Behún
2021-07-21 10:29   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 34/41] SPL: Add support for parsing board / BootROM specific image types Marek Behún
2021-07-22  8:50   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 35/41] arm: mvebu: Load main U-Boot binary in SPL code based on kwbimage header Marek Behún
2021-07-22  8:51   ` Stefan Roese
2021-07-19 12:20 ` [PATCH u-boot-mvebu v2 36/41] arm: mvebu: Remove legacy U-Boot header from kwbimage v1 files Marek Behún
2021-07-22  8:52   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 37/41] tools: kwbimage: Remove v1 kwbimage SPL padding to CONFIG_SYS_U_BOOT_OFFS bytes Marek Behún
2021-07-22  8:52   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 38/41] arm: mvebu: Remove unused macro CONFIG_SYS_U_BOOT_OFFS Marek Behún
2021-07-22  8:53   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 39/41] arm: mvebu: gdsys: Remove custom spl_board_init() Marek Behún
2021-07-22  8:55   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool Marek Behún
2021-07-22  8:55   ` Stefan Roese
2021-07-19 12:21 ` [PATCH u-boot-mvebu v2 41/41] kwbimage: Update help message about how to extract from an existing image Marek Behún
2021-07-22  8:56   ` Stefan Roese
2021-07-22  7:35 ` [PATCH u-boot-mvebu v2 00/41] kwboot / kwbimage improvements reducing image size Stefan Roese

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.