blob: 2132a03f63473db35a27c2c55f3268f35c8fc11c [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2016, ZIXC Corporation.
*
* File Name:
* File Mark:
* Description:
* Others:
* Version:
* Author:
* Date:
* History 1:
* Date:
* Version:
* Author:
* Modification:
* History 2:
********************************************************************************/
#ifndef __SECURE_VERIFY_H__
#define __SECURE_VERIFY_H__
//#include <image.h>
/*--------------CRM ¼Ä´æÆ÷------------*/
#define SYS_CTRL_BASE 0x00140000
#define SYS_LSP_CRM_BASE 0x01400000
#define SYS_MATRIX_CRM_BASE 0x01306000
#define SYS_SOC_CRM_BASE 0x0013b000
#define EFUSE_BYPASS (SYS_CTRL_BASE+0x140)
#define BOOTSEL_INFO (SYS_SOC_CRM_BASE+0x4)
#define MPLL_CFG0 (SYS_SOC_CRM_BASE+0x8)
#define UPLL_CFG0 (SYS_SOC_CRM_BASE+0x10)
#define RMCORE_CLK_CFG (SYS_SOC_CRM_BASE+0x38)
#define RM_MOD_CLKSEL (SYS_SOC_CRM_BASE+0x3c)
#define MATRIX_AXI_SEL (SYS_MATRIX_CRM_BASE+0x0)
/* -------- efuse ²ÎÊý-------------*/
#define SYS_EFUSE_BASE 0x0121b000
#define EFUSE_RAM_BASE (SYS_EFUSE_BASE+0x40)
/* -------- RSA, HASH ²ÎÊý-------------*/
#define SYS_RSA_BASE 0x0121c000
#define SYS_HASH_BASE 0x0121d000
/*ΪÁË¿´ÆðÀ´·½±ã, hashºÍkeyÔÚbufferµÄ´æ·Å˳ÐòΪµÍµØÖ··Å¸ßλÊý¾Ý*/
// ¶¨Òå½á¹¹
typedef volatile struct
{
u32 secure_flag;
u32 puk_hash[4];
u32 dev_id[3];
} efuse_struct;
typedef volatile struct
{
u32 secure_flag;
u32 puk_hash[8];
u32 dev_id[3];
} otp_struct;
typedef struct
{
u32 uiPubKeyRsaE[32];
u32 uiPubKeyRsaN[32];
u32 uiHashY[32];
} sImageHeader;
typedef struct
{
uint16_t signtype;
uint16_t hashtype;
uint32_t uiPubKeyRsaELen;
uint32_t uiPubKeyRsaNLen;
uint8_t uiPubKeyRsaE[4];
uint8_t uiPubKeyRsaN[256];
uint8_t reserve[112]; //380 bytes
uint8_t uiHashY[256]; //256 bytes
} sImageNewHeader;
extern otp_struct otpInfo;
static void get_efuse_data(void);
static u32 SMALL2BIG(u32 *puiArrIn, u32 *puiArrOut, u32 uiLen);
u8 secure_verify(u32 addr);
u8 rootfs_secure_verify(u32 addr);
static u8 data_cmp_word(u32* src, u32* dst, u32 cnt);
int efuse_init(void);
void efuse_get_devinfo(efuse_struct *efuse_info);
#endif /* __SECURE_VERIFY_H__ */