/*
* sector addresses
*/
-static unsigned long sector_address[19]={
+
+unsigned long sector_address[20]={
0x00000,0x02000,0x03000,0x04000,0x08000,
0x10000,0x18000,
0x20000,0x28000,
0x40000,0x48000,
0x50000,0x58000,
0x60000,0x68000,
- 0x70000,0x78000
+ 0x70000,0x78000,
+ 0x80000 // not a sector, end of flash!
};
/*
void flash_init(void) {
- /*
- * idle clocks between rad & write: 0+1
- * length of read access: 1+3
- * bls lines high during write access
- * length of write access: 0+1
- * no write protect, no burst-rom
- * 16 bit data width
- */
-
- BCFG0=0x10000420; // flash 1
- BCFG2=0x10000420; // flash 2
-
- /*
- * p3.27: write enable
- * p3.25: chip select 2
- * p2.15 - p2.8: data bus
- * a[1:15] -> address lines
- */
-
- PINSEL2=(PINSEL2&P2MASK)|(1<<8);
- PINSEL2=(PINSEL2&P2MASK&~((1<<15)|(1<<14)))|(1<<14);
- PINSEL2=(PINSEL2&P2MASK&~((1<<5)|(1<<4)))|(1<<4);
- PINSEL2=(PINSEL2&P2MASK)|(1<<24);
- PINSEL2=(PINSEL2&P2MASK&~((1<<27)|(1<<26)|(1<<25)))|(1<<27)|(1<<26);
+ flash_reset('0');
+ flash_reset('2');
}
void flash_reset(u8 bank) {
return;
}
+int flash_sec_erase(u32 addr) {
+
+ u32 a18_12;
+ u32 base;
+
+ a18_12=addr&0x00000fffff;
+ base=addr&0xff000000;
+
+ *((volatile u16 *)(base|(0x555<<1)))=0xaa;
+ *((volatile u16 *)(base|(0x2aa<<1)))=0x55;
+ *((volatile u16 *)(base|(0x555<<1)))=0x80;
+ *((volatile u16 *)(base|(0x555<<1)))=0xaa;
+ *((volatile u16 *)(base|(0x2aa<<1)))=0x55;
+ *((volatile u16 *)(base|(a18_12<<1)))=0x30;
+
+ return 0;
+}
+
void flash_chip_erase(u8 bank) {
u8 status;