Index: fw/sdk/libyc_qspi.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: fw/sdk/yc_qspi.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_qspi.h	(revision 790)
+++ /YC3121_SDK/fw/sdk/yc_qspi.h	(working copy)
@@ -88,6 +88,13 @@
 void enc_read_flash(uint32_t flash_addr, uint8_t *buf, uint32_t len);
 
 /**
+  * @brief  enc read flash fast(You must sure that the read area is written in enc)
+  * @param  flash_addr, rx buf, len
+  * @return SUCCESS or ERROR
+  */
+uint8_t enc_read_flash_fast(uint32_t flash_addr, uint8_t *buf, uint32_t len);
+
+/**
   * @brief  检测地址区域是否为空
   * @param  startaddr, len
   * @return none
@@ -118,6 +125,13 @@
   */
 void app_clear_disable_download_flag(void);
 
+/**
+  * @brief  update sign info
+  * @param  uint32_t boot_sign_info_addr:only boot sign info addr(sign info len is 288 byte)
+  * @return none
+  */
+void updateSignInfo(uint32_t boot_sign_info_addr);
+
 
 /**
   * @brief  get qspi lib version
Index: fw/sdk/yc_qspi.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_qspi.c	(revision 790)
+++ /YC3121_SDK/fw/sdk/yc_qspi.c	(working copy)
@@ -44,11 +44,13 @@
 uint8_t qspi_flash_sectorerase(uint32_t flash_addr)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
-	uint8_t result=((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_SECTORERASE_ADDR)(flash_addr); 
+	uint8_t result=((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_SECTORERASE_ADDR)(flash_addr);
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 	return result;
 }
 
@@ -56,11 +58,13 @@
 uint8_t qspi_flash_blockerase32k(uint32_t flash_addr)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
-	uint8_t result=((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_BLOCKERASE_ADDR)(flash_addr); 
+	uint8_t result=((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_BLOCKERASE_ADDR)(flash_addr);
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 	return result;
 }
 
@@ -72,21 +76,21 @@
     uint32_t packlen = 0;
 
     for(uint32_t i=0; i<packnum;i++)
-    {   
+    {
         packlen = len > BLOCK_UNIT?BLOCK_UNIT:len;
 
         ((void(*)(uint8_t *buf,uint8_t cmd,uint32_t addr))0x47e5)(buf,W25X_PAGE_PROGRAM,flash_addr+i*BLOCK_UNIT);
-        
+
         for(uint32_t j = 0;j<packlen;j++)
         {
             buf[4+j] =  tbuf[j+i*BLOCK_UNIT];
         }
         if(ERROR == ((uint8_t(*)(void))0x47d1)())
                 return ERROR;
-				
+
         if(ERROR == ((uint8_t(*)(uint8_t *tbuf,uint32_t len))0x468d)(buf,packlen+4))
             return ERROR;
-        
+
         if(ERROR == ((uint8_t(*)(void))0x4741)())
             return ERROR;
 
@@ -99,12 +103,14 @@
 uint8_t qspi_flash_write(uint32_t flash_addr, uint8_t *buf, uint32_t len)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
 	//uint8_t result=((uint8_t(*)(uint32_t flash_addr, uint32_t len, uint8_t *tbuf))FUNC_QSPI_FLASH_WRITE_ADDR)(flash_addr, len, buf);
 	uint8_t result=_qspi_flash_write(flash_addr, len, buf);
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
 	return result;
 }
 
@@ -117,7 +123,7 @@
     volatile uint32_t ctrl = QSPI_CTRL;
 
     mode=((ctrl>>16)&0xff);
-    
+
     tbuf[0] = mode;
 	tbuf[1] = flash_addr >> 16;
 	tbuf[2] = flash_addr >> 8;
@@ -125,20 +131,20 @@
 	tbuf[4] = 0;
 
    switch(mode) {
-		case W25X_FASTREAD_DUAL1 : 
+		case W25X_FASTREAD_DUAL1 :
 			tlen = 4;
 			break;
-		case W25X_FASTREAD_DUAL2 : 
+		case W25X_FASTREAD_DUAL2 :
 			break;
-		case W25X_FASTREAD_QUAD1 : 
+		case W25X_FASTREAD_QUAD1 :
 			tlen = 4;
 			break;
-		case W25X_FASTREAD_QUAD2 : 
+		case W25X_FASTREAD_QUAD2 :
 			break;
-		case W25X_FASTREAD_QUAD3 : 
+		case W25X_FASTREAD_QUAD3 :
 			break;
 		default :
-            tlen = 4; 
+            tlen = 4;
             break;
 	}
     QSPI_CTRL =ctrl&(~(QSPICFG_DECEN | QSPICFG_XIPEN|QSPICFG_RETRY));
@@ -148,7 +154,7 @@
 	DMA_LEN(DMACH_QSPI) = tlen << 16 | rlen;
     DMA_CONFIG(DMACH_QSPI) = 0;
 	DMA_START(DMACH_QSPI) = (1<<DMA_RESET_BIT);
-	DMA_START(DMACH_QSPI) &= ~(1<<DMA_RESET_BIT); 
+	DMA_START(DMACH_QSPI) &= ~(1<<DMA_RESET_BIT);
 	DMA_START(DMACH_QSPI) = (1<<DMA_START_BIT);
 
 	//ret = qspi_dma_wait(DMACH_QSPI);
@@ -170,12 +176,14 @@
 uint8_t qspi_flash_read(uint32_t flash_addr, uint8_t *buf,uint32_t len)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
-	prefetch(_qspi_flash_read,_qspi_flash_read+100);
+	prefetch(_qspi_flash_read,_qspi_flash_read+0x100);
 	uint8_t result=_qspi_flash_read(flash_addr, len, buf);
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 	return result;
 }
 
@@ -185,7 +193,8 @@
 	uint8_t addr_buf[4]={0};
 	uint32_t addr=0;
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	init_otp();
 	((uint8_t(*)(uint32_t flash_addr, uint8_t *buf, uint32_t len, uint8_t type, uint8_t use_pr_flash))FUNC_ENC_WRITE_FLASH_ADDR)(flash_addr,addr_buf,4, 0, 0);
 	deinit_otp();
@@ -193,20 +202,23 @@
 	addr |=addr_buf[2]<<8;
 	addr |=addr_buf[1]<<16;
 	addr |=addr_buf[0]<<24;
-	if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
 	return addr;
 }
 
 void enc_write_flash(uint32_t flash_addr, uint8_t *buf, uint32_t len)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
 	init_otp();
 	((uint8_t(*)(uint32_t flash_addr, uint8_t *buf, uint32_t len, uint8_t type, uint8_t use_pr_flash))FUNC_ENC_WRITE_FLASH_ADDR)(flash_addr,buf,len, 1, 0);
 	deinit_otp();
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 }
 
 
@@ -214,7 +226,8 @@
 {
 	uint32_t i,j,n;
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	n=(32-(flash_addr&0x1f))>len?len:(32-(flash_addr&0x1f));
 	i=0;
 	while(len>0)
@@ -236,18 +249,29 @@
 		len -=n;
 		n= len>=32? 32:len;
 	}
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
+}
+
+uint8_t enc_read_flash_fast(uint32_t flash_addr, uint8_t *buf, uint32_t len)
+{
+	__asm("CPSID i");
+	uint8_t result=((uint8_t(*)(uint8_t *dst,uint8_t *src,uint32_t len))(0x1d8+1))(buf,flash_addr,len);//_dmacopy
+	__asm("CPSIE i");
+	return result;
 }
 
 
 Boolean flash_blank_check(uint32_t startaddr, uint32_t len)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	init_otp();
 	uint8_t result=((Boolean(*)(uint32_t startaddr, uint32_t len))FUNC_FLASH_BLANK_CHECK)(((startaddr/32)*32), startaddr+len);
 	deinit_otp();
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 	return result;
 }
 
@@ -277,7 +301,7 @@
 		((uint8_t(*)(uint32_t flash_addr, uint32_t len, uint8_t *tbuf))FUNC_QSPI_FLASH_READ_ADDR)(page_addr, 4096, rbuf);
 		//step2: sector erase
 		//qspi_flash_sectorerase(page_addr);
-		((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_SECTORERASE_ADDR)(page_addr); 
+		((uint8_t(*)(uint32_t flash_addr))FUNC_QSPI_FLASH_SECTORERASE_ADDR)(page_addr);
 		//step3: fill page data
 		for(int i=0; i < fill_data_nums; i++)
 		{
@@ -295,7 +319,8 @@
 void enc_erase_flash_32byte(uint32_t flash_addr)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint32_t real_addr = 0;
 
 	init_otp();
@@ -311,7 +336,8 @@
 	prefetch((uint32_t*)replace_w_data_start_addr,(uint32_t*)(replace_w_data_start_addr+178));
 	replace_w_data(real_addr);
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 }
 
 
@@ -438,7 +464,50 @@
 	enc_write_flash(APP_INFO_ADDR,app_info_buf,sizeof(app_info_buf));
 }
 
-#define QSPI_LIB_VERSION 0x00010006
+#define SIGN_INFO_ADDR  0x1000000
+#define SIGN_INFO_LEN   0x120
+void updateSignInfo(uint32_t boot_sign_info_addr)
+{
+    uint8_t signBuf1[SIGN_INFO_LEN];
+    uint8_t signBuf2[SIGN_INFO_LEN];
+    uint8_t needUpdate=0;
+    //load signBuf1
+    prefetch((uint32_t*)SIGN_INFO_ADDR,(uint32_t*)(SIGN_INFO_ADDR+SIGN_INFO_LEN));
+    for(int i=0;i<SIGN_INFO_LEN;i++)
+    {
+        signBuf1[i]=(*((uint8_t*)(SIGN_INFO_ADDR+i)));
+    }
+    //load signBuf2
+    prefetch((uint32_t*)boot_sign_info_addr,(uint32_t*)(boot_sign_info_addr+SIGN_INFO_LEN));
+    for(int i=0;i<SIGN_INFO_LEN;i++)
+    {
+        signBuf2[i]=(*((uint8_t*)(boot_sign_info_addr+i)));
+    }
+    //compare
+    for(int i=0;i<SIGN_INFO_LEN;i++)
+    {
+        if(signBuf1[i]!=signBuf2[i])
+        {
+            needUpdate=1;
+            break;
+        }
+    }
+
+    if(needUpdate==1)
+    {
+        for(int i=0;i<SIGN_INFO_LEN;i+=32)
+        {
+            enc_erase_flash_32byte(SIGN_INFO_ADDR+i);
+        }
+        enc_write_flash(SIGN_INFO_ADDR,signBuf2,SIGN_INFO_LEN);
+
+        SYSCTRL_RST_EN |= 0x01;
+        SYSCTRL_RESET = 0x55;
+        while (1);
+    }
+}
+
+#define QSPI_LIB_VERSION 0x00010009
 uint32_t qspi_GetVersion(void)
 {
     return QSPI_LIB_VERSION;
@@ -447,11 +516,13 @@
 static uint8_t qspi_read_id(uint8_t *rbuf)
 {
 	uint32_t primask=get_primask();
-	if(!primask)	__asm("CPSID i");
+	//if(!primask)	__asm("CPSID i");
+	__asm("CPSID i");
 	uint8_t tmp = pre_qspi();
 	uint8_t result = ((uint8_t(*)(uint8_t *rbuf))(FUNC_READ_FLASH_ID))(rbuf);
 	end_qspi(tmp);
-	if(!primask)	__asm("CPSIE i");
+	//if(!primask)	__asm("CPSIE i");
+	__asm("CPSIE i");
 	return result;
 }
 
Index: fw/sdk/yc_qspi.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
