compilation errors fixed, debug now!
[my-code/arm.git] / betty / flash.c
index 8d9c02a..5e1a593 100644 (file)
@@ -10,7 +10,8 @@
 /*
  * sector addresses
  */
-static unsigned long sector_address[19]={
+
+unsigned long sector_address[20]={
        0x00000,0x02000,0x03000,0x04000,0x08000,
        0x10000,0x18000,
        0x20000,0x28000,
@@ -18,7 +19,8 @@ static unsigned long sector_address[19]={
        0x40000,0x48000,
        0x50000,0x58000,
        0x60000,0x68000,
-       0x70000,0x78000
+       0x70000,0x78000,
+       0x80000                 // not a sector, end of flash!
 };
 
 /*
@@ -27,30 +29,8 @@ static unsigned long sector_address[19]={
 
 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) {
@@ -96,6 +76,24 @@ void flash_sector_erase(u8 bank,u8 sector) {
        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;