Skip to content
Snippets Groups Projects
Commit c934aad0 authored by This contributor prefers not to receive mails's avatar This contributor prefers not to receive mails Committed by Stefan Roese
Browse files

tools: kwbimage: Align SPI and NAND images to 256 bytes


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: default avatarPali Rohár <pali@kernel.org>
Reviewed-by: default avatarMarek Behún <marek.behun@nic.cz>
Reviewed-by: default avatarStefan Roese <sr@denx.de>
Reviewed-by: default avatarChris Packham <judge.packham@gmail.com>
Tested-by: default avatarChris Packham <judge.packham@gmail.com>
parent 37cb9c15
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
/*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment