[PATCH u-boot-marvell 1/7] tools: kwbimage: Define structures for extended kwbimage v0 headers

Stefan Roese sr at denx.de
Wed Feb 16 10:47:34 CET 2022


On 2/15/22 19:59, Pali Rohár wrote:
> They are used by Marvell Dove 88AP510 BootROM.
> 
> After the main header is a list of optional extended headers and after that
> is a list of optional binary executable headers. Between each two extended
> headers is additional 0x20 byte long padding.
> 
> Original Kirkwood SoCs support only one extended header and no binary
> executable header.
> 
> Extension of struct ext_hdr_v0 is backward compatible with the old
> definition. Only reserved[] fields are changed.
> 
> Signed-off-by: Pali Rohár <pali at kernel.org>

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

Thanks,
Stefan

> ---
>   tools/kwbimage.h | 51 +++++++++++++++++++++++++++++++++++++++---------
>   1 file changed, 42 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/kwbimage.h b/tools/kwbimage.h
> index 9ebc7d72d363..706bebddf4fa 100644
> --- a/tools/kwbimage.h
> +++ b/tools/kwbimage.h
> @@ -48,9 +48,13 @@ struct main_hdr_v0 {
>   	uint32_t destaddr;		/* 0x10-0x13 */
>   	uint32_t execaddr;		/* 0x14-0x17 */
>   	uint8_t  satapiomode;		/* 0x18      */
> -	uint8_t  rsvd3;			/* 0x19      */
> +	uint8_t  nandblocksize;		/* 0x19      */
> +	union {
> +	uint8_t  nandbadblklocation;    /* 0x1A      */
>   	uint16_t ddrinitdelay;		/* 0x1A-0x1B */
> -	uint16_t rsvd2;			/* 0x1C-0x1D */
> +	};
> +	uint8_t  rsvd2;			/* 0x1C      */
> +	uint8_t  bin;			/* 0x1D      */
>   	uint8_t  ext;			/* 0x1E      */
>   	uint8_t  checksum;		/* 0x1F      */
>   } __packed;
> @@ -60,14 +64,43 @@ struct ext_hdr_v0_reg {
>   	uint32_t rdata;
>   } __packed;
>   
> -#define EXT_HDR_V0_REG_COUNT ((0x1dc - 0x20) / sizeof(struct ext_hdr_v0_reg))
> -
> +/* Structure of the extension header, version 0 (Kirkwood, Dove) */
>   struct ext_hdr_v0 {
> -	uint32_t              offset;
> -	uint8_t               reserved[0x20 - sizeof(uint32_t)];
> -	struct ext_hdr_v0_reg rcfg[EXT_HDR_V0_REG_COUNT];
> -	uint8_t               reserved2[7];
> -	uint8_t               checksum;
> +	/*
> +	 * Beware that extension header offsets specified in 88AP510 Functional
> +	 * Specifications are relative to the start of the main header, not to
> +	 * the start of the extension header itself.
> +	 */
> +	uint32_t offset;		/* 0x0-0x3     */
> +	uint8_t  rsvd1[8];		/* 0x4-0xB     */
> +	uint32_t enddelay;		/* 0xC-0xF     */
> +	uint32_t match_addr;		/* 0x10-0x13   */
> +	uint32_t match_mask;		/* 0x14-0x17   */
> +	uint32_t match_value;		/* 0x18-0x1B   */
> +	uint8_t  ddrwritetype;		/* 0x1C        */
> +	uint8_t  ddrresetmpp;		/* 0x1D        */
> +	uint8_t  ddrclkenmpp;		/* 0x1E        */
> +	uint8_t  ddrinitdelay;		/* 0x1F        */
> +	struct ext_hdr_v0_reg rcfg[55]; /* 0x20-0x1D7  */
> +	uint8_t  rsvd2[7];		/* 0x1D8-0x1DE */
> +	uint8_t  checksum;		/* 0x1DF       */
> +} __packed;
> +
> +/* Structure of the binary code header, version 0 (Dove) */
> +struct bin_hdr_v0 {
> +	uint32_t match_addr;		/* 0x00-0x03  */
> +	uint32_t match_mask;		/* 0x04-0x07  */
> +	uint32_t match_value;		/* 0x08-0x0B  */
> +	uint32_t offset;		/* 0x0C-0x0F  */
> +	uint32_t destaddr;		/* 0x10-0x13  */
> +	uint32_t size;			/* 0x14-0x17  */
> +	uint32_t execaddr;		/* 0x18-0x1B  */
> +	uint32_t params[4];		/* 0x1C-0x2B  */
> +	uint8_t  params_flags;		/* 0x2C       */
> +	uint8_t  rsvd1;			/* 0x2D       */
> +	uint8_t  rsvd2;			/* 0x2E       */
> +	uint8_t  checksum;		/* 0x2F       */
> +	uint8_t  code[2000];		/* 0x30-0x7FF */
>   } __packed;
>   
>   /* Structure of the main header, version 1 (Armada 370/XP/375/38x/39x) */

Viele Grüße,
Stefan Roese

-- 
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