diff options
-rw-r--r-- | package/mtd/src/fis.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/package/mtd/src/fis.c b/package/mtd/src/fis.c index 559ca95069..f825f590c9 100644 --- a/package/mtd/src/fis.c +++ b/package/mtd/src/fis.c @@ -143,6 +143,8 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new) struct fis_image_desc *redboot = NULL; struct fis_image_desc *first = NULL; struct fis_image_desc *last = NULL; + struct fis_image_desc *first_fb = NULL; + struct fis_image_desc *last_fb = NULL; struct fis_image_desc *desc; struct fis_part *part; uint32_t offset = 0, size = 0; @@ -184,13 +186,21 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new) } desc--; + first_fb = first; + last_fb = last; + + if (first_fb->hdr.flash_base > last_fb->hdr.flash_base) { + first_fb = last; + last_fb = first; + } + /* determine size of available space */ desc = (struct fis_image_desc *) start; while ((char *) desc < end) { if (!desc->hdr.name[0] || (desc->hdr.name[0] == 0xff)) break; - if (desc->hdr.flash_base > last->hdr.flash_base && + if (desc->hdr.flash_base > last_fb->hdr.flash_base && desc->hdr.flash_base < offset) offset = desc->hdr.flash_base; @@ -198,7 +208,7 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new) } desc--; - size = offset - first->hdr.flash_base; + size = offset - first_fb->hdr.flash_base; #ifdef notyet desc = first - 1; @@ -214,7 +224,7 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new) last++; desc = first + n_new; - offset = first->hdr.flash_base; + offset = first_fb->hdr.flash_base; if (desc != last) { if (desc > last) |