Changeset 20537


Ignore:
Timestamp:
2010-03-28T09:16:27+02:00 (8 years ago)
Author:
juhosg
Message:

package/mtd: fix automatic partition size detection in fis_remap

Location:
trunk/package/mtd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mtd/Makefile

    r19231 r20537  
    1010 
    1111PKG_NAME:=mtd 
    12 PKG_RELEASE:=11 
     12PKG_RELEASE:=12 
    1313 
    1414PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME) 
  • trunk/package/mtd/src/fis.c

    r19231 r20537  
    147147        struct fis_part *part; 
    148148        uint32_t offset = 0, size = 0; 
    149         char *end, *tmp; 
     149        char *start, *end, *tmp; 
    150150        int i; 
    151151 
     
    157157                fprintf(stderr, "Updating FIS table... \n"); 
    158158 
     159        start = (char *) desc; 
    159160        end = (char *) desc + fis_erasesize; 
    160161        while ((char *) desc < end) { 
     
    168169                        redboot = desc; 
    169170 
     171                /* update max offset */ 
     172                if (offset < desc->hdr.flash_base) 
     173                        offset = desc->hdr.flash_base; 
     174 
    170175                for (i = 0; i < n_old; i++) { 
    171176                        if (!strncmp((char *) desc->hdr.name, (char *) old[i].name, sizeof(desc->hdr.name))) { 
    172                                 size += desc->hdr.size; 
    173177                                last = desc; 
    174178                                if (!first) 
     
    181185        desc--; 
    182186 
    183         if (desc == last) { 
    184                 desc = fisdir; 
    185         } 
    186  
    187         /* size fixup */ 
    188         if (desc && (last->hdr.flash_base < desc->hdr.flash_base - last->hdr.size)) 
    189                         size += (desc->hdr.flash_base - last->hdr.flash_base) - last->hdr.size; 
     187        /* determine size of available space */ 
     188        desc = (struct fis_image_desc *) start; 
     189        while ((char *) desc < end) { 
     190                if (!desc->hdr.name[0] || (desc->hdr.name[0] == 0xff)) 
     191                        break; 
     192 
     193                if (desc->hdr.flash_base > last->hdr.flash_base && 
     194                    desc->hdr.flash_base < offset) 
     195                        offset = desc->hdr.flash_base; 
     196 
     197                desc++; 
     198        } 
     199        desc--; 
     200 
     201        size = offset - first->hdr.flash_base; 
    190202 
    191203#ifdef notyet 
Note: See TracChangeset for help on using the changeset viewer.