mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 04:06:22 +00:00
mtd: CFI cmdset_0002: enable erase-suspend-program
Erase-suspend for writing is required to avoid blocking applications that wish to write some data (to a NOR block other than the one being erased). Particularly, it solves some huge delays that an application (which writes to a UBIFS) will experience if UBI attaches to empty NOR flash. In this case the UBI background thread will erase a lot of blocks and the application can be blocked for minutes because of the "MTD/CFI chip lock". This feature has been disabled for years. Maybe this was because the old code turned it on for erase-suspend read-only chips also (cfip->EraseSuspend & 0x1). This is wrong and corrected now. This patch was tweaked by Norbert van Bolhuis. Signed-off-by: Norbert van Bolhuis <nvbolhuis@aimvalley.nl> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
c1317f7163
commit
2695eab964
1 changed files with 3 additions and 13 deletions
|
@ -490,10 +490,6 @@ static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* FIXME: erase-suspend-program is broken. See
|
|
||||||
http://lists.infradead.org/pipermail/linux-mtd/2003-December/009001.html */
|
|
||||||
printk(KERN_NOTICE "cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.\n");
|
|
||||||
|
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
return mtd;
|
return mtd;
|
||||||
|
|
||||||
|
@ -589,15 +585,9 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case FL_ERASING:
|
case FL_ERASING:
|
||||||
if (mode == FL_WRITING) /* FIXME: Erase-suspend-program appears broken. */
|
if (!cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
|
||||||
goto sleep;
|
!(mode == FL_READY || mode == FL_POINT ||
|
||||||
|
(mode == FL_WRITING && (cfip->EraseSuspend & 0x2))))
|
||||||
if (!( mode == FL_READY
|
|
||||||
|| mode == FL_POINT
|
|
||||||
|| !cfip
|
|
||||||
|| (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))
|
|
||||||
|| (mode == FL_WRITING && (cfip->EraseSuspend & 0x1)
|
|
||||||
)))
|
|
||||||
goto sleep;
|
goto sleep;
|
||||||
|
|
||||||
/* We could check to see if we're trying to access the sector
|
/* We could check to see if we're trying to access the sector
|
||||||
|
|
Loading…
Reference in a new issue