changeset 286:845276b93eaa

Add support for K-series (synchronous) strataflash parts.
author msalter
date Mon, 12 Aug 2002 12:20:49 +0000
parents b3a03108f8ff
children e514771dd548
files packages/devs/flash/intel/strata/current/ChangeLog packages/devs/flash/intel/strata/current/src/flash_unlock_block.c packages/devs/flash/intel/strata/current/src/strata.h
diffstat 3 files changed, 28 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/flash/intel/strata/current/ChangeLog
+++ b/packages/devs/flash/intel/strata/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-12  Mark Salter  <msalter@redhat.com>
+
+	* src/flash_unlock_block.c: Add synchronous strataflash support.
+	* src/strata.h: Add comments regarding synchronous strataflash.
+
 2002-04-30  Christoph Csebits  <christoph.csebits@frequentis.com>
 
 	* src/flash_unlock_block.c: Getting the current block lock
--- a/packages/devs/flash/intel/strata/current/src/flash_unlock_block.c
+++ b/packages/devs/flash/intel/strata/current/src/flash_unlock_block.c
@@ -72,11 +72,15 @@
 int
 flash_unlock_block(volatile flash_t *block, int block_size, int blocks)
 {
-    volatile flash_t *ROM, *bp, *bpv;
+    volatile flash_t *ROM;
     flash_t stat;
     int timeout = 5000000;
+    int cache_on;
+#ifndef CYGOPT_FLASH_IS_SYNCHRONOUS
+    int i;
+    volatile flash_t *bp, *bpv;
     unsigned char is_locked[MAX_FLASH_BLOCKS];
-    int i, cache_on;
+#endif
 
     HAL_DCACHE_IS_ENABLED(cache_on);
     if (cache_on) {
@@ -91,6 +95,14 @@ flash_unlock_block(volatile flash_t *blo
     // Clear any error conditions
     ROM[0] = FLASH_Clear_Status;
 
+#ifdef CYGOPT_FLASH_IS_SYNCHRONOUS
+    // Clear lock bit
+    block[0] = FLASH_Clear_Locks;
+    block[0] = FLASH_Clear_Locks_Confirm;  // Confirmation
+    while(((stat = ROM[0]) & FLASH_Status_Ready) != FLASH_Status_Ready) {
+        if (--timeout == 0) break;
+    }
+#else
     // Get current block lock state.  This needs to access each block on
     // the device so currently locked blocks can be re-locked.
     bp = ROM;
@@ -131,6 +143,7 @@ flash_unlock_block(volatile flash_t *blo
         }
         bp += block_size / sizeof(*bp);
     }
+#endif  // CYGOPT_FLASH_IS_SYNCHRONOUS
 
     // Restore ROM to "normal" mode
     ROM[0] = FLASH_Reset;
--- a/packages/devs/flash/intel/strata/current/src/strata.h
+++ b/packages/devs/flash/intel/strata/current/src/strata.h
@@ -61,18 +61,20 @@
 // It is expected that the above include defined all the properties of the
 // device we want to drive: the choices this module supports include:
 //
-//                                 Buffered  Read     Block
-//                                  write    query    locking
-// 28FxxxB3 - Bootblock            - no      no       no
-// 28FxxxC3 - StrataFlash          - no      yes      yes
-// 28FxxxJ3 - Advanced StrataFlash - yes     yes      yes
+//                                    Buffered  Read     Block
+//                                     write    query    locking
+// 28FxxxB3 - Bootblock               - no      no       no
+// 28FxxxC3 - StrataFlash             - no      yes      yes
+// 28FxxxJ3 - Advanced StrataFlash    - yes     yes      yes
+// 28FxxxK3 - Synchronous StrataFlash - yes     yes      yes
 // 
 // These options are controlled by defining or not, in that include file,
 // these symbols (not CDL options, just symbols - though they could be CDL
 // in future)
 //         CYGOPT_FLASH_IS_BOOTBLOCK     - for xxxB3 devices.
 //         CYGOPT_FLASH_IS_NOT_ADVANCED  - for xxxC3 devices.
-//         neither                       - for xxxJ3 devices.  
+//         CYGOPT_FLASH_IS_SYNCHRONOUS   - for xxxK3 devices.
+//         none of the above             - for xxxJ3 devices.  
 // (Advanced seems to be usual these days hence the sense of that opt)
 //
 // Other properties are controlled by these symbols: