blob: a088e8b8b51444829c1bb72773a296b06e063e2c [file] [log] [blame]
#ifndef __ASR_FLAG_H__
#define __ASR_FLAG_H__
typedef struct{
unsigned int CurImageID;
unsigned int ImageType;
unsigned int ImageState; /* 1: new image is backed up, 0: not backed up */
unsigned int ImageBkAddr;
unsigned int ImageBkLen;
unsigned int SegState;
unsigned int SegIndex;
unsigned int SegDestBkAddr;
unsigned int SegDestBkLen;
unsigned int PreTailAddr;
unsigned int PreTailLen;
unsigned int NextHeadAddr;
unsigned int NextHeadLen;
unsigned int NextSegWriteOffset;
unsigned int NextSegReadOffset;
unsigned int NextSegEraseOffset;
}SDfotaState, *pSDfotaState;
struct DDRT_STATE{
unsigned int test_proc :1; //1: start, 0: done
unsigned int last_res :1; //1: fail, 0: pass
unsigned int total_times :15;
unsigned int fail_times :15;
};
typedef union{
unsigned int value;
struct DDRT_STATE bits;
}DDRTestState, *pDDRTestState;
#define INVALID_DDRT_STATE (0xFFFFFFFF)
struct asr_firmware_flag {
unsigned int header;
unsigned int upgrade_flag; //1,upgrade; 2, backup boot
unsigned int fbf_flash_address;
unsigned int fbf_file_size;
unsigned int erase_psm;
unsigned int erase_psm_address;
unsigned int erase_psm_size;
unsigned int erase_fs;
unsigned int fs_erase_address;
unsigned int fs_erase_size;
unsigned int upgrade_method; //1,TR069; 2, SD; 3,WebUI
unsigned int UnlockKeyFlag;
unsigned int production_mode_flag; //for production mode
unsigned int eehP[2];
unsigned int cpsr[2];
unsigned int hawk[2];
unsigned int imsd[2];
unsigned int pipe[2];
unsigned int fast[2];
unsigned int apmf[2];
unsigned int pid[2];
unsigned int vid[2];
unsigned int obmdl[2];
unsigned int dlflag[2];
unsigned int ramdump[2];
unsigned int dfota_n_of_images;
unsigned int dfota_need_copy_only;
unsigned int dfota_conpy_len;
#ifdef CONFIG_AB_SYSTEM
unsigned int active_slot; /* prev active slot */
unsigned int temp_active_slot; /* current active slot */
unsigned int reboot_cnt;
unsigned int synced;
unsigned int rsvd[16];
#endif
unsigned int nocp[2];
unsigned int trust_boot_status;
char mversion[128];
SDfotaState SDfotaInfo;
unsigned int ref_count;
unsigned int flag_len;
unsigned int version;
unsigned int DDR_ID;
unsigned int Flash_ID;
unsigned int cplog[2];
DDRTestState ddrt_state;
unsigned int svc_state;
char MVersion_B[128]; /* only use for AB system */
unsigned int Reserved[68]; /* reserved for asr */
unsigned int ReservedForCustomer[35]; /* reserved for customer */
/* reserve to make the ASR_Flag length as 1KB */
unsigned int crc;
/* NOTICE !!!
* If you change this structure, you must also sync the change to OBM/Uboot/OTA/Telephony
* OBM: obm/Common/Misc/asr_flag.h
* Uboot: uboot/board/Marvell/common/asr_flag.h
* OTA: services/ota/otad.c
* Telephony: lte_telephony/apps/cp_load/cploader.h
* If add a new member to this structure, must decrease the size of Reserved[]
*/
};
#define ASRFLAG_HEADER 0x464F5441
#define MAX_ASR_FLAG_SIZE 1024
/* ASR Flag version history
* 1.0.0.1: support dual asr flag
* 1.0.0.2: support asr flag crc
*/
#define ASRFLAG_VERSION_LEGACY 0xFFFFFFFF
#define ASRFLAG_VERSION_DAF 0x31303031
#define ASRFLAG_VERSION_CRC 0x31303032
#define ASRFLAG_VERSION ASRFLAG_VERSION_CRC
enum TRUST_BOOT_CODES{
TB_NO_ERROR = 0,
TB_TIMH_ERROR = 1,
TB_OBMI_ERROR = 2,
TB_UBOOT_ERROR = 3,
TB_DTIM_ERROR = 4,
TB_ZIMG_ERROR = 5,
TB_SYSJ_ERROR = 6,
TB_RFBI_ERROR = 7,
TB_GRBI_ERROR = 8,
TB_ARBI_ERROR = 9,
TB_ABRL_ERROR = 10,
TB_CBRL_ERROR = 11,
TB_APRL_ERROR = 12,
TB_OEMD_ERROR = 13,
TB_DTIM_PRIMARY_ERROR = 14,
TB_DTIM_RECOVERY_ERROR = 15,
TB_DTIM_PPSETTING_ERROR = 16,
TB_TOS_ERROR = 17,
TB_OSLO_GENERAL_ERROR = 18,
TB_AB_SYSTEM_BOOT_ERROR = 19,
TB_CPHD_ERROR = 20,
TB_BXBI_ERROR,
TB_AB_SYSTEM_ROLLBACK_ERROR,
TB_SDTIM_ERROR,
};
unsigned int get_asr_flag_offset(void);
struct asr_firmware_flag *get_asr_flag(void);
int asr_flag_init(void *ptim);
int asr_flag_update(void);
int asr_flag_trust_boot_update(unsigned int tb_status);
void *asr_read_tim(void);
#endif