changeset 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 d07decb23fa2
children a70dd1fde406
files packages/redboot/current/ChangeLog packages/redboot/current/src/flash.c
diffstat 2 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/packages/redboot/current/ChangeLog
+++ b/packages/redboot/current/ChangeLog
@@ -1,3 +1,8 @@
+2006-04-03  Lars Povlsen  <lpovlsen@vitesse.com>
+ 
+ 	* src/flash.c (fis_update_directory): Fixed flash region size when
+	CYGSEM_REDBOOT_FLASH_COMBINED_FIS_AND_CONFIG is enabled.
+ 
 2006-03-27  Gary Thomas  <gary@mlbassoc.com>
 
 	* src/net/tcp.c (__tcp_write_block): Fix calculation of actual
--- 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);
 }