#define TO_TEXT __attribute__ ((section (".text")))
-#define PIC_ADR(_ptr,_var) \
- { \
- __asm__ ( \
- "bsr 1f\n" \
- "1:\tmov.l @sp+,%0\n" \
- "\tadd.l %1-1b,%0\n" \
- : "=r" (_ptr) : "i" (&(_var)) : "cc" \
- ); \
- }
-
static const unsigned long
flash_blocks[] TO_TEXT =
{0x00000,0x01000,0x02000,0x03000,0x04000,0x05000,0x06000,0x07000,
".global _FlWait\n"
"_FlWait:\n"
#if (CPU_SYS_HZ>16000000)
-" shll.l er0"
+" shll.l er0\n"
#endif
" mov.w #1,r1\n"
" bra 2f:8\n"
{
int bl=0;
unsigned long *blocks;
- PIC_ADR(blocks,flash_blocks[0]);
+ blocks = &flash_blocks[0];
if(adr<blocks[0]) return -1;
while(blocks[bl+1]){
{
__u16 *p, *pe;
unsigned long *blocks;
- PIC_ADR(blocks,flash_blocks[0]);
+ blocks = &flash_blocks[0];
if(bl>=flash_block_count) return -2;
if(bl<0) return -2;
int FlErase(int bl)
{
int n=100; /*N*/
- if(bl>=flash_block_count) return -4;
- if(bl<0) return -5;
+ if(bl>=flash_block_count) return -EBOOT_BLNUM_HIGH;
+ if(bl<0) return -EBOOT_BLNUM_LOW;
if(FlTest(bl)==0) return 0;
- if((*FLM_FLMCR1 & FLMCR1_FWEm)==0) return -1;
+ if((*FLM_FLMCR1 & FLMCR1_FWEm)==0) return -EBOOT_NO_FWE;
*FLM_FLMCR1=FLMCR1_SWE1m;
FlWait(1); /*x*/
}
*FLM_FLMCR1=0;
FlWait(100); /*x1*/
- return -2;
+ return -EBOOT_ERASE_FAILURE;
fls_error:
*FLM_FLMCR1=0;
- return -3;
+ return -EBOOT_FLASH_ERROR;
}
void FlProgPulse(int time_zx)
int n;
__u8 *x;
__u8 c,d;
- if((unsigned long)adr & (FLASH_ROW-1)) return -6;
- if((*FLM_FLMCR1 & FLMCR1_FWEm)==0 ) return -5;
+ if((unsigned long)adr & (FLASH_ROW-1)) return -EBOOT_ROW_BEGIN;
+ if((*FLM_FLMCR1 & FLMCR1_FWEm)==0 ) return -EBOOT_NO_FWE;
#ifdef WITH_EXTERNAL_FLASH
if(((__u32)adr>=EXTERNAL_FLASH_START)&&
((__u32)adr<=EXTERNAL_FLASH_END)){
x=adr;
for(i=FLASH_ROW;i--;x++){
- if(*x!=0xff) return -4;
+ if(*x!=0xff) return -EBOOT_ROW_NOT_ERASED;
}
x=data;
for(i=0;i<FLASH_ROW;i++,x++) prog_data[i]=*x;
FlProgPulse(n>6?150:25); /*z0<30 or z2<200 if n>N1*/
+ /* Program-Verify Mode */
*FLM_FLMCR1|=FLMCR1_PV1m;
FlWait(4); /*gamma*/
i=0;
d=data[i];
if((~c&d)&0xff) goto fls_error;
if(c!=d) {
- m=1;
+ m=1; /* Reprogram needed */
/* DEB_BLOG(0xEE000000+(long)x); */
/* DEB_BLOG(0xEF000000+(__u16)(c<<8)+(__u8)d); */
}
for(i=0;i<FLASH_ROW;i++){
c=prog_data[i];
d=data[i];
- if(c!=d) m=1;
+ if(c!=d) m=1; /* Reprogram needed */
if((~c&d)&0xff) goto fls_error;
prog_data[i]=d|~c;
}
}
*FLM_FLMCR1=0;
FlWait(100); /*x1*/
- return -1;
+ return -EBOOT_PROG_FAILURE;
fls_error:
*FLM_FLMCR1=0;
- return -3;
+ return -EBOOT_FLASH_VERIFY;
}
int FlPrepBlk(unsigned long badr, unsigned long len)
/* reset */
FLASH_WR16(a,EXTFL_cmd_reset);
FlWait(2);
- if(FLASH_RD16(addr)!=val) return -3;
+ if(FLASH_RD16(addr)!=val) return -EBOOT_EXT_FLASH_VERIFY;
((__u16*)addr)++;
}
return 0;