1 #ifndef _SECURE_BOOT_H_
2 #define _SECURE_BOOT_H_
4 #define KEY_INFO_SIZ (512)
5 #define CUSTOM_DATA_SIZ (1024)
6 #define VLR_INFO_SIZ (512)
7 #define VLR_INFO_OFF (512)
9 #if defined(CONFIG_SPX30G)
10 #define INTER_RAM_BEGIN 0x50003000
12 #define INTER_RAM_BEGIN 0x50005000
14 #define CONFIG_SEC_LOAD_LEN 0xC00
15 #define CONFIG_SYS_NAND_U_BOOT_LOAD_LEN 0x80000
17 #define KEY_INFO_OFF (INTER_RAM_BEGIN + CONFIG_SPL_LOAD_LEN - KEY_INFO_SIZ - VLR_INFO_SIZ)
18 #define VLR_INFO_OFF (CONFIG_SYS_NAND_U_BOOT_START + CONFIG_SYS_NAND_U_BOOT_SIZE - VLR_INFO_SIZ)
20 #ifdef CONFIG_NAND_SPL
21 #define panic(x...) do{}while(0)
22 #define printf(x...) do{}while(0)
25 #define MIN_UNIT (512)
26 #define HEADER_NAME "SPRD-SECUREFLAG"
28 #define VLR_NAME (0x3A524C56)
29 #define PUK_NAME (0x3A4B5550)
30 #define CODE_NAME (0x45444F43)
33 #define SHA1HashSize 20
34 typedef unsigned int uint32_t;
35 typedef unsigned char uint8_t;
37 * This structure will hold context information for the SHA-1
40 typedef struct SHA1Context32 {
41 unsigned int Intermediate_Hash[5]; /* Message Digest */
42 unsigned int Length_Low; /* Message length in bits */
43 unsigned int Length_High; /* Message length in bits */
44 /* Index into message block array */
45 unsigned int Message_Block_Index;
46 unsigned int W[80]; /* 512-bit message blocks */
57 uint8_t header_magic[16];
60 uint8_t header_ver_padding[8];
62 uint8_t reserved[432];
74 #define VLR_MAGIC (0x524C56FF)
84 uint32_t intermediate_hash[5];
87 uint32_t msg_block_idx;
94 void (*efuse_init) (void);
95 void (*efuse_close) (void);
96 uint32_t(*efuse_read) (uint32_t block_id, uint32_t * data);
97 uint32_t(*sha1reset_32) (sha1context_32 *);
98 uint32_t(*sha1input_32) (sha1context_32 *, const uint32_t *, uint32_t);
99 uint32_t(*sha1result_32) (sha1context_32 *, uint8_t *);
100 void (*rsa_modpower) (uint32_t * p, uint32_t * m, uint32_t * r2, uint32_t e);
101 } rom_callback_func_t;
104 rom_callback_func_t *rom_callback;
105 void (*secure_check) (uint8_t * data, uint32_t data_len, uint8_t * data_hash, uint8_t * data_key);
106 } sec_callback_func_t;
108 void secure_check(uint8_t * data, uint32_t data_len, uint8_t * data_hash, uint8_t * data_key);
109 int cal_md5(void *data, uint32_t len, void *harsh_data);
110 int secureboot_enabled(void);
113 * Function Prototypes
115 PUBLIC int SHA1Reset_32(SHA1Context_32 *);
116 PUBLIC int SHA1Input_32(SHA1Context_32 *, const unsigned int *message, unsigned int len);
117 PUBLIC int SHA1Result_32(SHA1Context_32 * context, unsigned char *Message_Digest);