diff options
author | Todd Poynor <tpoynor@mvista.com> | 2005-03-29 17:06:40 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-05-23 07:05:37 -0400 |
commit | 9a6e73ec4906bdf44ccfaaf8db56693b146595c0 (patch) | |
tree | affdbc2dbf1cf7058331e1bdbf70d1b6c8384ce8 /drivers | |
parent | 1a78ff6b4114cfb0f734b7df217759315d692683 (diff) |
[MTD] cfi_cmdset_0001: Skip delay if Instant Block Locking is set
Skip jiffy delay after each block lock/unlock for Intel CFI flash
with the "Instant Individual Block Locking" feature bit set.
Signed-off-by: Todd Poynor <tpoynor@mvista.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 100a00063f87..51675bb2f830 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * | 4 | * |
5 | * (C) 2000 Red Hat. GPL'd | 5 | * (C) 2000 Red Hat. GPL'd |
6 | * | 6 | * |
7 | * $Id: cfi_cmdset_0001.c,v 1.171 2005/03/19 22:39:49 gleixner Exp $ | 7 | * $Id: cfi_cmdset_0001.c,v 1.172 2005/03/29 22:06:37 tpoynor Exp $ |
8 | * | 8 | * |
9 | * | 9 | * |
10 | * 10/10/2000 Nicolas Pitre <nico@cam.org> | 10 | * 10/10/2000 Nicolas Pitre <nico@cam.org> |
@@ -1823,6 +1823,7 @@ static int __xipram do_xxlock_oneblock(struct map_info *map, struct flchip *chip | |||
1823 | unsigned long adr, int len, void *thunk) | 1823 | unsigned long adr, int len, void *thunk) |
1824 | { | 1824 | { |
1825 | struct cfi_private *cfi = map->fldrv_priv; | 1825 | struct cfi_private *cfi = map->fldrv_priv; |
1826 | struct cfi_pri_intelext *extp = cfi->cmdset_priv; | ||
1826 | map_word status, status_OK; | 1827 | map_word status, status_OK; |
1827 | unsigned long timeo = jiffies + HZ; | 1828 | unsigned long timeo = jiffies + HZ; |
1828 | int ret; | 1829 | int ret; |
@@ -1852,9 +1853,16 @@ static int __xipram do_xxlock_oneblock(struct map_info *map, struct flchip *chip | |||
1852 | } else | 1853 | } else |
1853 | BUG(); | 1854 | BUG(); |
1854 | 1855 | ||
1855 | spin_unlock(chip->mutex); | 1856 | /* |
1856 | UDELAY(map, chip, adr, 1000000/HZ); | 1857 | * If Instant Individual Block Locking supported then no need |
1857 | spin_lock(chip->mutex); | 1858 | * to delay. |
1859 | */ | ||
1860 | |||
1861 | if (!extp || !(extp->FeatureSupport & (1 << 5))) { | ||
1862 | spin_unlock(chip->mutex); | ||
1863 | UDELAY(map, chip, adr, 1000000/HZ); | ||
1864 | spin_lock(chip->mutex); | ||
1865 | } | ||
1858 | 1866 | ||
1859 | /* FIXME. Use a timer to check this, and return immediately. */ | 1867 | /* FIXME. Use a timer to check this, and return immediately. */ |
1860 | /* Once the state machine's known to be working I'll do that */ | 1868 | /* Once the state machine's known to be working I'll do that */ |