123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /* SPDX-License-Identifier: BSD-2-Clause */
- /*
- * Renesas RZ/N1 Package Table format
- * (C) 2015-2016 Renesas Electronics Europe, LTD
- * All rights reserved.
- *
- * Converted to mkimage plug-in
- * (C) Copyright 2022 Schneider Electric
- */
- #ifndef _SPKGIMAGE_H_
- #define _SPKGIMAGE_H_
- #ifdef __GNUC__
- #define __packed __attribute((packed))
- #else
- #define __packed
- #endif
- #define SPKG_HEADER_MARKER {'R', 'Z', 'N', '1'}
- #define SPKG_HEADER_SIZE 24
- #define SPKG_HEADER_COUNT 8
- #define SPKG_BLP_SIZE 264
- #define SPKG_CRC_SIZE 4
- /**
- * struct spkg_hdr - SPKG header
- * @marker: magic pattern "RZN1"
- * @version: header version (currently 1)
- * @ecc: ECC enable and block size.
- * @ecc_scheme: ECC algorithm selction
- * @ecc_bytes: ECC bytes per block
- * @payload_length: length of the payload (including CRC)
- * @load_address: address in memory where payload should be loaded
- * @execution_offset: offset from @load_address where execution starts
- * @crc: 32-bit CRC of the above header fields
- *
- * SPKG header format is defined by Renesas. It is documented in the Reneasas
- * RZ/N1 User Manual, Chapter 7.4 ("SPKG format").
- *
- * The BootROM searches this header in order to find and validate the boot
- * payload. It is therefore mandatory to wrap the payload in this header.
- *
- * The ECC-related fields @ecc @ecc_scheme @ecc_bytes are used only when
- * booting from NAND flash, and they are only used while fetching the payload.
- * These values are used to initialize the ECC controller. To avoid using
- * non-portable bitfields, struct spkg_hdr uses uint8_t for these fields, so
- * the user must shift the values into the correct spot.
- *
- * The payload will be loaded into memory at @payload_address.
- * Execution then jumps to @payload_address + @execution_offset.
- * The LSB of @execution_offset selects between ARM and Thumb mode,
- * as per the usual ARM interworking convention.
- */
- struct spkg_hdr {
- uint8_t marker[4]; /* aka magic */
- uint8_t version;
- uint8_t ecc;
- uint8_t ecc_scheme;
- uint8_t ecc_bytes;
- uint32_t payload_length; /* only HIGHER 24 bits */
- uint32_t load_address;
- uint32_t execution_offset;
- uint32_t crc; /* of this header */
- } __packed;
- /**
- * struct spkg_file - complete SPKG image
- *
- * A SPKG image consists of 8 identical copies of struct spkg_hdr, each one
- * occupying 24 bytes, for a total of 192 bytes.
- *
- * This is followed by the payload (the u-boot binary), and a 32-bit CRC.
- *
- * Optionally, the payload can be being with security header ("BLp_header").
- * This feature is not currently supported in mkimage.
- *
- * The payload is typically padded with 0xFF bytes so as to bring the total
- * image size to a multiple of the flash erase size (often 64kB).
- */
- struct spkg_file {
- struct spkg_hdr header[SPKG_HEADER_COUNT];
- uint8_t payload[0];
- /* then the CRC */
- } __packed;
- #endif
|