]>
Commit | Line | Data |
---|---|---|
cba69eee | 1 | /* |
e954eb80 BN |
2 | * (C) Copyright 2007-2011 |
3 | * Allwinner Technology Co., Ltd. <www.allwinnertech.com> | |
4 | * Tom Cubie <tangliang@allwinnertech.com> | |
cba69eee IC |
5 | * |
6 | * SPDX-License-Identifier: GPL-2.0+ | |
7 | */ | |
8 | #ifndef _ASM_ARCH_SPL_H_ | |
ed6c7f7f | 9 | #define _ASM_ARCH_SPL_H_ |
cba69eee | 10 | |
e954eb80 | 11 | #define BOOT0_MAGIC "eGON.BT0" |
a1884381 BN |
12 | #define SPL_SIGNATURE "SPL" /* marks "sunxi" SPL header */ |
13 | #define SPL_HEADER_VERSION 1 | |
e954eb80 | 14 | |
bc613d85 | 15 | #ifdef CONFIG_SUNXI_HIGH_SRAM |
d96ebc46 SS |
16 | #define SPL_ADDR 0x10000 |
17 | #else | |
af654d14 | 18 | #define SPL_ADDR 0x0 |
d96ebc46 | 19 | #endif |
af654d14 | 20 | |
b19236fd SS |
21 | /* The low 8-bits of the 'boot_media' field in the SPL header */ |
22 | #define SUNXI_BOOTED_FROM_MMC0 0 | |
9acebe8a OS |
23 | #define SUNXI_BOOTED_FROM_NAND 1 |
24 | #define SUNXI_BOOTED_FROM_MMC2 2 | |
b19236fd SS |
25 | #define SUNXI_BOOTED_FROM_SPI 3 |
26 | ||
e954eb80 BN |
27 | /* boot head definition from sun4i boot code */ |
28 | struct boot_file_head { | |
29 | uint32_t b_instruction; /* one intruction jumping to real code */ | |
30 | uint8_t magic[8]; /* ="eGON.BT0" or "eGON.BT1", not C-style str */ | |
31 | uint32_t check_sum; /* generated by PC */ | |
32 | uint32_t length; /* generated by PC */ | |
33 | /* | |
34 | * We use a simplified header, only filling in what is needed | |
35 | * by the boot ROM. To be compatible with Allwinner tools we | |
36 | * would need to implement the proper fields here instead of | |
37 | * padding. | |
a1884381 BN |
38 | * |
39 | * Actually we want the ability to recognize our "sunxi" variant | |
40 | * of the SPL. To do so, let's place a special signature into the | |
41 | * "pub_head_size" field. We can reasonably expect Allwinner's | |
42 | * boot0 to always have the upper 16 bits of this set to 0 (after | |
43 | * all the value shouldn't be larger than the limit imposed by | |
44 | * SRAM size). | |
45 | * If the signature is present (at 0x14), then we know it's safe | |
46 | * to use the remaining 8 bytes (at 0x18) for our own purposes. | |
47 | * (E.g. sunxi-tools "fel" utility can pass information there.) | |
e954eb80 | 48 | */ |
a1884381 BN |
49 | union { |
50 | uint32_t pub_head_size; | |
51 | uint8_t spl_signature[4]; | |
52 | }; | |
53 | uint32_t fel_script_address; | |
320e0570 BN |
54 | /* |
55 | * If the fel_uEnv_length member below is set to a non-zero value, | |
56 | * it specifies the size (byte count) of data at fel_script_address. | |
57 | * At the same time this indicates that the data is in uEnv.txt | |
58 | * compatible format, ready to be imported via "env import -t". | |
59 | */ | |
60 | uint32_t fel_uEnv_length; | |
61 | uint32_t reserved1[2]; | |
b19236fd SS |
62 | uint32_t boot_media; /* written here by the boot ROM */ |
63 | uint32_t reserved2[5]; /* padding, align to 64 bytes */ | |
e954eb80 BN |
64 | }; |
65 | ||
af654d14 BN |
66 | #define is_boot0_magic(addr) (memcmp((void *)addr, BOOT0_MAGIC, 8) == 0) |
67 | ||
cba69eee | 68 | #endif |