MTD: Change cfi-mtd to accept non-uniform sector sizes
authorStefan Roese <sr@denx.de>
Wed, 18 Mar 2009 10:17:37 +0000 (11:17 +0100)
committerStefan Roese <sr@denx.de>
Wed, 29 Apr 2009 09:06:06 +0000 (11:06 +0200)
With this patch non-uniform NOR FLASH chips (chips with multiple erase
regions) can be exported via the cfi-mtd layer and therefor used by UBI.
We select the largest sector size as erasesize. The cfi driver will make
sure that the smaller sectors are handled correctly.

Signed-off-by: Stefan Roese <sr@denx.de>
drivers/mtd/cfi_mtd.c

index 9ac1c86cced3a8d5848c031b153a138cea973211..f03e4fbd728d576dc07dea34a151d86279ef5e82 100644 (file)
@@ -142,22 +142,12 @@ static int cfi_mtd_set_erasesize(struct mtd_info *mtd, flash_info_t *fi)
        int sect_size = 0;
        int sect;
 
+       /*
+        * Select the largest sector size as erasesize (e.g. for UBI)
+        */
        for (sect = 0; sect < fi->sector_count; sect++) {
-               if (!sect_size) {
+               if (flash_sector_size(fi, sect) > sect_size)
                        sect_size = flash_sector_size(fi, sect);
-                       continue;
-               }
-
-               if (sect_size != flash_sector_size(fi, sect)) {
-                       sect_size = 0;
-                       break;
-               }
-       }
-
-       if (!sect_size) {
-               puts("cfi-mtd: devices with multiple sector sizes are"
-                                                       "not supported\n");
-               return -EINVAL;
        }
 
        mtd->erasesize = sect_size;