mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
sunxi: Extend SPL header versioning
On Allwinner SoCs we use some free bytes at the beginning of the SPL image to store various information. We have a version byte to allow updates, but changing this always requires all tools to be updated as well. Introduce the concept of semantic versioning [1] to the SPL header: The major part of the version number only changes on incompatible updates, a minor number bump indicates backward compatibility. This patch just documents the major/minor split, adds some comments to the header file and uses the versioning information for the existing users. [1] https://semver.org Signed-off-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Icenowy Zheng <icenowy@aosc.io> Acked-by: Maxime Ripard <maxime.ripard@bootlin.com> Acked-by: Jagan Teki <jagan@openedev.com>
This commit is contained in:
parent
c6c2c85e4b
commit
55d481d201
2 changed files with 16 additions and 7 deletions
|
@ -9,7 +9,16 @@
|
|||
|
||||
#define BOOT0_MAGIC "eGON.BT0"
|
||||
#define SPL_SIGNATURE "SPL" /* marks "sunxi" SPL header */
|
||||
#define SPL_HEADER_VERSION 2
|
||||
#define SPL_MAJOR_BITS 3
|
||||
#define SPL_MINOR_BITS 5
|
||||
#define SPL_VERSION(maj, min) \
|
||||
((((maj) & ((1U << SPL_MAJOR_BITS) - 1)) << SPL_MINOR_BITS) | \
|
||||
((min) & ((1U << SPL_MINOR_BITS) - 1)))
|
||||
|
||||
#define SPL_HEADER_VERSION SPL_VERSION(0, 2)
|
||||
|
||||
#define SPL_ENV_HEADER_VERSION SPL_VERSION(0, 1)
|
||||
#define SPL_DT_HEADER_VERSION SPL_VERSION(0, 2)
|
||||
|
||||
#define SPL_ADDR CONFIG_SUNXI_SRAM_ADDRESS
|
||||
|
||||
|
@ -45,14 +54,14 @@ struct boot_file_head {
|
|||
uint32_t pub_head_size;
|
||||
uint8_t spl_signature[4];
|
||||
};
|
||||
uint32_t fel_script_address;
|
||||
uint32_t fel_script_address; /* since v0.1, set by sunxi-fel */
|
||||
/*
|
||||
* If the fel_uEnv_length member below is set to a non-zero value,
|
||||
* it specifies the size (byte count) of data at fel_script_address.
|
||||
* At the same time this indicates that the data is in uEnv.txt
|
||||
* compatible format, ready to be imported via "env import -t".
|
||||
*/
|
||||
uint32_t fel_uEnv_length;
|
||||
uint32_t fel_uEnv_length; /* since v0.1, set by sunxi-fel */
|
||||
/*
|
||||
* Offset of an ASCIIZ string (relative to the SPL header), which
|
||||
* contains the default device tree name (CONFIG_DEFAULT_DEVICE_TREE).
|
||||
|
@ -60,11 +69,11 @@ struct boot_file_head {
|
|||
* by flash programming tools for providing nice informative messages
|
||||
* to the users.
|
||||
*/
|
||||
uint32_t dt_name_offset;
|
||||
uint32_t dt_name_offset; /* since v0.2, set by mksunxiboot */
|
||||
uint32_t reserved1;
|
||||
uint32_t boot_media; /* written here by the boot ROM */
|
||||
/* A padding area (may be used for storing text strings) */
|
||||
uint32_t string_pool[13];
|
||||
uint32_t string_pool[13]; /* since v0.2, filled by mksunxiboot */
|
||||
/* The header must be a multiple of 32 bytes (for VBAR alignment) */
|
||||
};
|
||||
|
||||
|
|
|
@ -667,9 +667,9 @@ static void parse_spl_header(const uint32_t spl_addr)
|
|||
return; /* signature mismatch, no usable header */
|
||||
|
||||
uint8_t spl_header_version = spl->spl_signature[3];
|
||||
if (spl_header_version != SPL_HEADER_VERSION) {
|
||||
if (spl_header_version < SPL_ENV_HEADER_VERSION) {
|
||||
printf("sunxi SPL version mismatch: expected %u, got %u\n",
|
||||
SPL_HEADER_VERSION, spl_header_version);
|
||||
SPL_ENV_HEADER_VERSION, spl_header_version);
|
||||
return;
|
||||
}
|
||||
if (!spl->fel_script_address)
|
||||
|
|
Loading…
Reference in a new issue