129 lines
3.1 KiB
C
129 lines
3.1 KiB
C
#ifndef __MACH_FLASH_HEADER_H
|
|
#define __MACH_FLASH_HEADER_H
|
|
|
|
#define __flash_header_start __section(.flash_header_start)
|
|
|
|
#if defined(CONFIG_ARCH_IMX_INTERNAL_BOOT_NOR)
|
|
#define __flash_header_section __section(.flash_header_0x1000)
|
|
#define __dcd_entry_section __section(.dcd_entry_0x1000)
|
|
#define __image_len_section __section(.image_len_0x1000)
|
|
#define FLASH_HEADER_OFFSET 0x1000
|
|
#elif defined(CONFIG_ARCH_IMX_INTERNAL_BOOT_ONENAND)
|
|
#define __flash_header_section __section(.flash_header_0x0100)
|
|
#define __dcd_entry_section __section(.dcd_entry_0x0100)
|
|
#define __image_len_section __section(.image_len_0x0100)
|
|
#define FLASH_HEADER_OFFSET 0x0100
|
|
#else
|
|
#define __flash_header_section __section(.flash_header_0x0400)
|
|
#define __dcd_entry_section __section(.dcd_entry_0x0400)
|
|
#define __image_len_section __section(.image_len_0x0400)
|
|
#define FLASH_HEADER_OFFSET 0x0400
|
|
#endif
|
|
|
|
#define __flash_header_0x1000 __section(.flash_header_0x1000)
|
|
#define __dcd_entry_0x1000 __section(.dcd_entry_0x1000)
|
|
#define __image_len_0x1000 __section(.image_len_0x1000)
|
|
|
|
#define __flash_header_0x0100 __section(.flash_header_0x0100)
|
|
#define __dcd_entry_0x0100 __section(.dcd_entry_0x0100)
|
|
#define __image_len_0x0100 __section(.image_len_0x0100)
|
|
|
|
#define __flash_header_0x0400 __section(.flash_header_0x0400)
|
|
#define __dcd_entry_0x0400 __section(.dcd_entry_0x0400)
|
|
#define __image_len_0x0400 __section(.image_len_0x0400)
|
|
|
|
/*
|
|
* NOR is not automatically copied anywhere by the boot ROM
|
|
*/
|
|
#if defined (CONFIG_ARCH_IMX_INTERNAL_BOOT_NOR)
|
|
#define DEST_BASE IMX_CS0_BASE
|
|
#else
|
|
#define DEST_BASE TEXT_BASE
|
|
#endif
|
|
|
|
#define FLASH_HEADER_BASE (DEST_BASE + FLASH_HEADER_OFFSET)
|
|
|
|
struct imx_dcd_entry {
|
|
unsigned long ptr_type;
|
|
unsigned long addr;
|
|
unsigned long val;
|
|
};
|
|
|
|
struct imx_dcd_v2_entry {
|
|
__be32 addr;
|
|
__be32 val;
|
|
};
|
|
|
|
#define DCD_BARKER 0xb17219e9
|
|
|
|
struct imx_rsa_public_key {
|
|
unsigned char rsa_exponent[4];
|
|
unsigned char *rsa_modululs;
|
|
unsigned short *exponent_size;
|
|
unsigned short modulus_size;
|
|
unsigned char init_flag;
|
|
};
|
|
|
|
#define APP_CODE_BARKER 0x000000b1
|
|
|
|
struct imx_flash_header {
|
|
unsigned long app_code_jump_vector;
|
|
unsigned long app_code_barker;
|
|
unsigned long app_code_csf;
|
|
unsigned long dcd_ptr_ptr;
|
|
unsigned long super_root_key;
|
|
unsigned long dcd;
|
|
unsigned long app_dest;
|
|
unsigned long dcd_barker;
|
|
unsigned long dcd_block_len;
|
|
};
|
|
|
|
#define IVT_HEADER_TAG 0xd1
|
|
#define IVT_VERSION 0x40
|
|
|
|
#define DCD_HEADER_TAG 0xd2
|
|
#define DCD_VERSION 0x40
|
|
|
|
#define DCD_COMMAND_WRITE_TAG 0xcc
|
|
#define DCD_COMMAND_WRITE_PARAM 0x04
|
|
|
|
struct imx_ivt_header {
|
|
uint8_t tag;
|
|
__be16 length;
|
|
uint8_t version;
|
|
} __attribute__((packed));
|
|
|
|
struct imx_dcd_command {
|
|
uint8_t tag;
|
|
__be16 length;
|
|
uint8_t param;
|
|
} __attribute__((packed));
|
|
|
|
struct imx_dcd {
|
|
struct imx_ivt_header header;
|
|
struct imx_dcd_command command;
|
|
};
|
|
|
|
struct imx_boot_data {
|
|
uint32_t start;
|
|
uint32_t size;
|
|
uint32_t plugin;
|
|
};
|
|
|
|
struct imx_flash_header_v2 {
|
|
struct imx_ivt_header header;
|
|
|
|
uint32_t entry;
|
|
uint32_t reserved1;
|
|
uint32_t dcd_ptr;
|
|
uint32_t boot_data_ptr;
|
|
uint32_t self;
|
|
uint32_t csf;
|
|
uint32_t reserved2;
|
|
|
|
struct imx_boot_data boot_data;
|
|
struct imx_dcd dcd;
|
|
};
|
|
|
|
#endif /* __MACH_FLASH_HEADER_H */
|