303 lines
13 KiB
C
Executable file
303 lines
13 KiB
C
Executable file
/*
|
||
* (C) Copyright 2012
|
||
* wangflord@allwinnertech.com
|
||
*
|
||
*
|
||
* This program is free software; you can redistribute it and/or
|
||
* modify it under the terms of the GNU General Public License as
|
||
* published by the Free Software Foundation; either version 2 of
|
||
* the License, or (at your option) any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program;
|
||
*
|
||
*/
|
||
#ifndef __boot0_v2_h
|
||
#define __boot0_v2_h
|
||
|
||
#define STAMP_VALUE 0x5F0A6C39
|
||
|
||
|
||
typedef struct
|
||
{
|
||
unsigned int ChannelCnt;
|
||
unsigned int ChipCnt; //the count of the total nand flash chips are currently connecting on the CE pin
|
||
unsigned int ChipConnectInfo; //chip connect information, bit == 1 means there is a chip connecting on the CE pin
|
||
unsigned int RbCnt;
|
||
unsigned int RbConnectInfo; //the connect information of the all rb chips are connected
|
||
unsigned int RbConnectMode; //the rb connect mode
|
||
unsigned int BankCntPerChip; //the count of the banks in one nand chip, multiple banks can support Inter-Leave
|
||
unsigned int DieCntPerChip; //the count of the dies in one nand chip, block management is based on Die
|
||
unsigned int PlaneCntPerDie; //the count of planes in one die, multiple planes can support multi-plane operation
|
||
unsigned int SectorCntPerPage; //the count of sectors in one single physic page, one sector is 0.5k
|
||
unsigned int PageCntPerPhyBlk; //the count of physic pages in one physic block
|
||
unsigned int BlkCntPerDie; //the count of the physic blocks in one die, include valid block and invalid block
|
||
unsigned int OperationOpt; //the mask of the operation types which current nand flash can support support
|
||
unsigned int FrequencePar; //the parameter of the hardware access clock, based on 'MHz'
|
||
unsigned int EccMode; //the Ecc Mode for the nand flash chip, 0: bch-16, 1:bch-28, 2:bch_32
|
||
unsigned char NandChipId[8]; //the nand chip id of current connecting nand chip
|
||
unsigned int ValidBlkRatio; //the ratio of the valid physical blocks, based on 1024
|
||
unsigned int good_block_ratio; //good block ratio get from hwscan
|
||
unsigned int ReadRetryType; //the read retry type
|
||
unsigned int DDRType;
|
||
unsigned int Reserved[32];
|
||
}boot_nand_para_t0;
|
||
|
||
|
||
//通用的,和GPIO相关的数据结构
|
||
typedef struct _normal_gpio_cfg
|
||
{
|
||
unsigned char port; //端口号
|
||
unsigned char port_num; //端口内编号
|
||
char mul_sel; //功能编号
|
||
char pull; //电阻状态
|
||
char drv_level; //驱动驱动能力
|
||
char data; //输出电平
|
||
unsigned char reserved[2]; //保留位,保证对齐
|
||
}normal_gpio_cfg;
|
||
|
||
/******************************************************************************/
|
||
/* file head of Boot0 */
|
||
/******************************************************************************/
|
||
typedef struct _boot0_private_head_t
|
||
{
|
||
unsigned int prvt_head_size;
|
||
char prvt_head_vsn[4]; // the version of boot0_private_head_t
|
||
unsigned int dram_para[32]; // DRAM patameters for initialising dram. Original values is arbitrary,
|
||
int uart_port; // UART控制器编号
|
||
normal_gpio_cfg uart_ctrl[2]; // UART控制器(调试打印口)数据信息
|
||
int enable_jtag; // 1 : enable, 0 : disable
|
||
normal_gpio_cfg jtag_gpio[5]; // 保存JTAG的全部GPIO信息
|
||
normal_gpio_cfg storage_gpio[32]; // 存储设备 GPIO信息
|
||
char storage_data[512 - sizeof(normal_gpio_cfg) * 32]; // 用户保留数据信息
|
||
//boot_nand_connect_info_t nand_connect_info;
|
||
}boot0_private_head_t;
|
||
|
||
|
||
typedef struct standard_Boot_file_head
|
||
{
|
||
unsigned int jump_instruction; // one intruction jumping to real code
|
||
unsigned char magic[8]; // ="eGON.BT0" or "eGON.BT1", not C-style string.
|
||
unsigned int check_sum; // generated by PC
|
||
unsigned int length; // generated by PC
|
||
unsigned int pub_head_size; // the size of boot_file_head_t
|
||
unsigned char pub_head_vsn[4]; // the version of boot_file_head_t
|
||
unsigned char file_head_vsn[4]; // the version of boot0_file_head_t or boot1_file_head_t
|
||
unsigned char Boot_vsn[4]; // Boot version
|
||
unsigned char eGON_vsn[4]; // eGON version
|
||
unsigned char platform[8]; // platform information
|
||
}standard_boot_file_head_t;
|
||
|
||
|
||
typedef struct _boot0_file_head_t
|
||
{
|
||
standard_boot_file_head_t boot_head;
|
||
boot0_private_head_t prvt_head;
|
||
}boot0_file_head_t;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#endif // ifndef __boot0_h
|
||
|
||
/* end of boot0.h */
|
||
|
||
typedef struct _boot_core_para_t
|
||
{
|
||
unsigned int user_set_clock; // 运行频率 M单位
|
||
unsigned int user_set_core_vol; // 核心电压 mV单位
|
||
unsigned int vol_threshold; // 开机门限电压
|
||
}boot_core_para_t;
|
||
|
||
|
||
#ifndef __uboot_h
|
||
#define __uboot_h
|
||
|
||
/******************************************************************************/
|
||
/* file head of Boot2.0-uboot */
|
||
/******************************************************************************/
|
||
typedef struct _uboot_private_head_t
|
||
{
|
||
unsigned int dram_para[32];
|
||
int run_clock; // Mhz
|
||
int run_core_vol; // mV
|
||
int uart_port; // UART控制器编号
|
||
normal_gpio_cfg uart_gpio[2]; // UART控制器(调试打印口)GPIO信息
|
||
int twi_port; // TWI控制器编号
|
||
normal_gpio_cfg twi_gpio[2]; // TWI控制器GPIO信息,用于控制TWI
|
||
int work_mode; // 工作模式
|
||
int storage_type; // 存储介质类型 0:nand 1:sdcard 2: spinor
|
||
normal_gpio_cfg nand_gpio[32]; // nand GPIO信息
|
||
char nand_spare_data[256]; // nand 额外信息
|
||
normal_gpio_cfg sdcard_gpio[32]; // sdcard GPIO信息
|
||
char sdcard_spare_data[256]; // sdcard 额外信息
|
||
int secureos_exist;
|
||
uint uboot_start_sector_in_mmc;
|
||
int reserved[4]; // 保留数据位, 256bytes align
|
||
}uboot_private_head_t;
|
||
|
||
typedef struct _uBoot_file_head
|
||
{
|
||
unsigned int jump_instruction; // one intruction jumping to real code
|
||
unsigned char magic[8]; // ="u-boot"
|
||
unsigned int check_sum; // generated by PC
|
||
unsigned int align_size; // align size in byte
|
||
unsigned int length; // the size of all file
|
||
unsigned int uboot_length; // the size of uboot
|
||
unsigned char version[8]; // uboot version
|
||
unsigned char platform[8]; // platform information
|
||
int reserved[1]; //stamp space, 16bytes align
|
||
}uboot_file_head;
|
||
|
||
|
||
typedef struct _uboot_file_head_t
|
||
{
|
||
uboot_file_head boot_head;
|
||
uboot_private_head_t prvt_head;
|
||
}uboot_file_head_t;
|
||
|
||
#endif // ifndef __uboot_h
|
||
|
||
/* end of uboot.h */
|
||
|
||
|
||
#ifndef __boot1_h
|
||
#define __boot1_h
|
||
/******************************************************************************/
|
||
/* file head of Boot1.0-boot1 */
|
||
/******************************************************************************/
|
||
typedef struct _boot_dram_para_t
|
||
{
|
||
__u32 dram_baseaddr;
|
||
__u32 dram_clk;
|
||
__u32 dram_type;
|
||
__u32 dram_rank_num;
|
||
__u32 dram_chip_density;
|
||
__u32 dram_io_width;
|
||
__u32 dram_bus_width;
|
||
__u32 dram_cas;
|
||
__u32 dram_zq;
|
||
__u32 dram_odt_en;
|
||
__u32 dram_size;
|
||
__u32 dram_tpr0;
|
||
__u32 dram_tpr1;
|
||
__u32 dram_tpr2;
|
||
__u32 dram_tpr3;
|
||
__u32 dram_tpr4;
|
||
__u32 dram_tpr5;
|
||
__u32 dram_emr1;
|
||
__u32 dram_emr2;
|
||
__u32 dram_emr3;
|
||
}boot_dram_para_t;
|
||
|
||
typedef struct _boot1_private_head_t
|
||
{
|
||
__u32 prvt_head_size;
|
||
__u8 prvt_head_vsn[4]; // the version of Boot1_private_hea
|
||
__s32 uart_port; // UART控制器编号
|
||
normal_gpio_cfg uart_ctrl[2]; // UART控制器(调试打印口)GPIO信息
|
||
boot_dram_para_t dram_para; // dram init para
|
||
char script_buf[32 * 1024]; // 脚本参数
|
||
boot_core_para_t core_para; // 关键参数
|
||
__s32 twi_port; // TWI控制器编号
|
||
normal_gpio_cfg twi_ctrl[2]; // TWI控制器GPIO信息,用于控制TWI
|
||
__s32 debug_enable; // debug使能参数
|
||
__s32 hold_key_min; // hold key最小值
|
||
__s32 hold_key_max; // hold key最大值
|
||
__u32 work_mode; // 模式,区分量产还是升级
|
||
__u32 storage_type; // 存储介质类型 0:nand 1:sdcard 2: spinor
|
||
normal_gpio_cfg storage_gpio[32]; // 存储设备 GPIO信息
|
||
char storage_data[512 - sizeof(normal_gpio_cfg) * 32]; // 用户保留数据信息
|
||
//boot_nand_connect_info_t nand_connect_info; // nand 参数
|
||
}boot1_private_head_t;
|
||
|
||
typedef struct _Boot1_file_head
|
||
{
|
||
__u32 jump_instruction; // one intruction jumping to real code
|
||
__u8 magic[8]; // ="eGON.BT0" or "eGON.BT1", not C-style string.
|
||
__u32 check_sum; // generated by PC
|
||
__u32 length; // generated by PC
|
||
__u32 boot1_length; // the size of boot_file_head_t
|
||
__u32 align_size; // the align size of boot1
|
||
__u8 file_head_vsn[4]; // the version of boot0_file_head_t or boot1_file_head_t
|
||
__u8 Boot_vsn[4]; // Boot version
|
||
__u8 eGON_vsn[4]; // eGON version
|
||
__u8 platform[8]; // platform information
|
||
}boot1_file_head;
|
||
|
||
typedef struct _boot1_file_head_t
|
||
{
|
||
boot1_file_head boot_head;
|
||
boot1_private_head_t prvt_head;
|
||
}boot1_file_head_t;
|
||
|
||
#endif // ifndef __boot1_h
|
||
|
||
/* end of boot1.h */
|
||
|
||
#ifndef __toc_h
|
||
#define __toc_h
|
||
//toc1的头部数据结构
|
||
typedef struct sbrom_toc1_head_info
|
||
{
|
||
char name[16] ; //user can modify
|
||
unsigned int magic ; //must equal TOC_U32_MAGIC
|
||
unsigned int add_sum ;
|
||
|
||
unsigned int serial_num ; //user can modify
|
||
unsigned int status ; //user can modify,such as TOC_MAIN_INFO_STATUS_ENCRYP_NOT_USED
|
||
|
||
unsigned int items_nr; //total entry number
|
||
unsigned int valid_len;
|
||
unsigned int reserved[5]; //reserved for future
|
||
unsigned int end;
|
||
}sbrom_toc1_head_info_t;
|
||
|
||
typedef struct
|
||
{
|
||
unsigned char name[8];
|
||
unsigned int magic;
|
||
unsigned int check_sum;
|
||
|
||
unsigned int serial_num;
|
||
unsigned int status;
|
||
|
||
unsigned int items_nr;
|
||
unsigned int length;
|
||
unsigned char platform[4];
|
||
|
||
unsigned int reserved[2];
|
||
unsigned int end;
|
||
|
||
}toc0_private_head_t;
|
||
|
||
typedef struct sbrom_toc0_config
|
||
{
|
||
unsigned char config_vsn[4];
|
||
unsigned int dram_para[32]; // dram参数
|
||
int uart_port; // UART控制器编号
|
||
normal_gpio_cfg uart_ctrl[2]; // UART控制器GPIO
|
||
int enable_jtag; // JTAG使能
|
||
normal_gpio_cfg jtag_gpio[5]; // JTAG控制器GPIO
|
||
normal_gpio_cfg storage_gpio[50]; // 存储设备 GPIO信息
|
||
// 0-23放nand,24-31存放卡0,32-39放卡2
|
||
// 40-49存放spi
|
||
char storage_data[384]; // 0-159,存储nand信息;160-255,存放卡信息
|
||
unsigned int secure_dram_mbytes; //
|
||
unsigned int drm_start_mbytes; //
|
||
unsigned int drm_size_mbytes; //
|
||
unsigned int res[8]; // 总共1024字节
|
||
}sbrom_toc0_config_t;
|
||
|
||
#define TOC0_CONFIG_HEAD_OFFSET 0x80
|
||
#define TOC_MAIN_INFO_MAGIC 0x89119800
|
||
#endif /*endif toc_*/
|
||
|
||
|