[PATCH u-boot-mvebu 05/31] tools: kwbimage: Fix generation of SATA, SDIO and PCIe images
Stefan Roese
sr at denx.de
Thu Jul 15 10:35:24 CEST 2021
On 08.07.21 19:30, Marek Behún wrote:
> From: Pali Rohár <pali at 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 at kernel.org>
> Reviewed-by: Marek Behún <marek.behun at nic.cz>
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
> ---
> tools/kwbimage.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index f40ba0994d..44bf5ee026 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -1281,6 +1281,26 @@ 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.
> + */
> + if (main_hdr->blockid == IBR_HDR_SATA_ID)
> + main_hdr->srcaddr = cpu_to_le32((headersz + 511) / 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.
> + */
> + if (main_hdr->blockid == IBR_HDR_SDIO_ID)
> + main_hdr->srcaddr = cpu_to_le32((headersz + 511) / 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) {
> /*
> @@ -1734,6 +1754,8 @@ static int kwbimage_generate(struct image_tool_params *params,
> */
> 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_SDIO_ID || bootfrom == IBR_HDR_PEX_ID)
> + return 4 + (512 - (alloc_len + s.st_size + 4) % 512) % 512;
> else
> return 4 + (4 - s.st_size % 4) % 4;
> }
>
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 at denx.de
More information about the U-Boot
mailing list