diff packages/redboot/current/src/flash.c @ 2175:55e180a14a91

* src/flash.c (fis_update_directory): Fixed flash region size when CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG is enabled. CVS: ----------------------------------------------------------------------
author asl
date Tue, 04 Apr 2006 16:15:32 +0000
parents 9a0cafc8b9bf
children 5c5e93c863ac
line wrap: on
line diff
--- a/packages/redboot/current/src/flash.c
+++ b/packages/redboot/current/src/flash.c
@@ -245,6 +245,7 @@ fis_lookup(char *name, int *num)
 void
 fis_update_directory(void)
 {
+    int blk_size = fisdir_size;
     int stat;
     void *err_addr;
 
@@ -252,23 +253,24 @@ fis_update_directory(void)
 #ifdef CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG
     memcpy((char *)fis_work_block+fisdir_size, config, cfg_size);
     conf_endian_fixup((char *)fis_work_block+fisdir_size);
+    blk_size += cfg_size;
 #endif
 #ifdef CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL
     // Ensure [quietly] that the directory is unlocked before trying to update
-    flash_unlock((void *)fis_addr, fisdir_size, (void **)&err_addr);
+    flash_unlock((void *)fis_addr, blk_size, (void **)&err_addr);
 #endif
-    if ((stat = flash_erase(fis_addr, fisdir_size, (void **)&err_addr)) != 0) {
+    if ((stat = flash_erase(fis_addr, blk_size, (void **)&err_addr)) != 0) {
         diag_printf("Error erasing FIS directory at %p: %s\n", err_addr, flash_errmsg(stat));
     } else {
         if ((stat = FLASH_PROGRAM(fis_addr, fis_work_block,
-                                  fisdir_size, (void **)&err_addr)) != 0) {
+                                  blk_size, (void **)&err_addr)) != 0) {
             diag_printf("Error writing FIS directory at %p: %s\n", 
                         err_addr, flash_errmsg(stat));
         }
     }
 #ifdef CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL
     // Ensure [quietly] that the directory is locked after the update
-    flash_lock((void *)fis_addr, fisdir_size, (void **)&err_addr);
+    flash_lock((void *)fis_addr, blk_size, (void **)&err_addr);
 #endif
     fis_endian_fixup(fis_work_block);
 }