diff packages/redboot/current/src/flash.c @ 1251:dc8c964619a0

Fix broken FIS free/create
author gthomas
date Fri, 26 Sep 2003 18:44:01 +0000
parents dbcfe4e0dbd2
children 205922255412
line wrap: on
line diff
--- a/packages/redboot/current/src/flash.c
+++ b/packages/redboot/current/src/flash.c
@@ -493,19 +493,19 @@ fis_list(int argc, char *argv[])
 static void
 fis_free(int argc, char *argv[])
 {
-    unsigned long *fis_ptr, *fis_end;
+    unsigned long *fis_ptr, *fis_end, flash_data;
     unsigned long *area_start;
     void *err_addr;
 
     // Do not search the area reserved for pre-RedBoot systems:
-    flash_read(fis_addr, fis_work_block, fisdir_size, (void **)&err_addr);
-    fis_ptr = (unsigned long *)((CYG_ADDRESS)fis_work_block + 
+    fis_ptr = (unsigned long *)((CYG_ADDRESS)flash_start + 
                                 CYGNUM_REDBOOT_FLASH_RESERVED_BASE + 
                                 CYGBLD_REDBOOT_MIN_IMAGE_SIZE);
     fis_end = (unsigned long *)(CYG_ADDRESS)flash_end;
     area_start = fis_ptr;
     while (fis_ptr < fis_end) {
-        if (*fis_ptr != (unsigned long)0xFFFFFFFF) {
+        flash_read(fis_ptr, &flash_data, sizeof(unsigned long), (void **)&err_addr);
+        if (flash_data != (unsigned long)0xFFFFFFFF) {
             if (area_start != fis_ptr) {
                 // Assume that this is something
                 diag_printf("  0x%08lX .. 0x%08lX\n",
@@ -514,7 +514,8 @@ fis_free(int argc, char *argv[])
             // Find next blank block
             area_start = fis_ptr;
             while (area_start < fis_end) {
-                if (*area_start == (unsigned long)0xFFFFFFFF) {
+                flash_read(area_start, &flash_data, sizeof(unsigned long), (void **)&err_addr);
+                if (flash_data == (unsigned long)0xFFFFFFFF) {
                     break;
                 }
                 area_start += flash_block_size / sizeof(CYG_ADDRESS);
@@ -534,19 +535,19 @@ fis_free(int argc, char *argv[])
 static bool
 fis_find_free(CYG_ADDRESS *addr, unsigned long length)
 {
-    unsigned long *fis_ptr, *fis_end;
+    unsigned long *fis_ptr, *fis_end, flash_data;
     unsigned long *area_start;
     void *err_addr;
 
     // Do not search the area reserved for pre-RedBoot systems:
-    flash_read(fis_addr, fis_work_block, fisdir_size, (void **)&err_addr);
-    fis_ptr = (unsigned long *)((CYG_ADDRESS)fis_work_block + 
+    fis_ptr = (unsigned long *)((CYG_ADDRESS)flash_start + 
                                 CYGNUM_REDBOOT_FLASH_RESERVED_BASE + 
                                 CYGBLD_REDBOOT_MIN_IMAGE_SIZE);
     fis_end = (unsigned long *)(CYG_ADDRESS)flash_end;
     area_start = fis_ptr;
     while (fis_ptr < fis_end) {
-        if (*fis_ptr != (unsigned long)0xFFFFFFFF) {
+        flash_read(fis_ptr, &flash_data, sizeof(unsigned long), (void **)&err_addr);
+        if (flash_data != (unsigned long)0xFFFFFFFF) {
             if (area_start != fis_ptr) {
                 // Assume that this is something
                 if ((fis_ptr-area_start) >= (length/sizeof(unsigned))) {
@@ -557,7 +558,8 @@ fis_find_free(CYG_ADDRESS *addr, unsigne
             // Find next blank block
             area_start = fis_ptr;
             while (area_start < fis_end) {
-                if (*area_start == (unsigned long)0xFFFFFFFF) {
+                flash_read(area_start, &flash_data, sizeof(unsigned long), (void **)&err_addr);
+                if (flash_data == (unsigned long)0xFFFFFFFF) {
                     break;
                 }
                 area_start += flash_block_size / sizeof(CYG_ADDRESS);