git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'origin'
[pandora-kernel.git]
/
drivers
/
mtd
/
chips
/
cfi_cmdset_0001.c
diff --git
a/drivers/mtd/chips/cfi_cmdset_0001.c
b/drivers/mtd/chips/cfi_cmdset_0001.c
index
143f01a
..
1c074d6
100644
(file)
--- a/
drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/
drivers/mtd/chips/cfi_cmdset_0001.c
@@
-4,7
+4,7
@@
*
* (C) 2000 Red Hat. GPL'd
*
*
* (C) 2000 Red Hat. GPL'd
*
- * $Id: cfi_cmdset_0001.c,v 1.18
5 2005/11/07 11:14:22 gleixner
Exp $
+ * $Id: cfi_cmdset_0001.c,v 1.18
6 2005/11/23 22:07:52 nico
Exp $
*
*
* 10/10/2000 Nicolas Pitre <nico@cam.org>
*
*
* 10/10/2000 Nicolas Pitre <nico@cam.org>
@@
-408,6
+408,7
@@
struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary)
cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp;
cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp;
cfi->chips[i].ref_point_counter = 0;
cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp;
cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp;
cfi->chips[i].ref_point_counter = 0;
+ init_waitqueue_head(&(cfi->chips[i].wq));
}
map->fldrv = &cfi_intelext_chipdrv;
}
map->fldrv = &cfi_intelext_chipdrv;
@@
-644,9
+645,8
@@
static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr
*
* - contension arbitration is handled in the owner's context.
*
*
* - contension arbitration is handled in the owner's context.
*
- * The 'shared' struct can be read when its lock is taken.
- * However any writes to it can only be made when the current
- * owner's lock is also held.
+ * The 'shared' struct can be read and/or written only when
+ * its lock is taken.
*/
struct flchip_shared *shared = chip->priv;
struct flchip *contender;
*/
struct flchip_shared *shared = chip->priv;
struct flchip *contender;
@@
-675,14
+675,13
@@
static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr
}
timeo = jiffies + HZ;
spin_lock(&shared->lock);
}
timeo = jiffies + HZ;
spin_lock(&shared->lock);
+ spin_unlock(contender->mutex);
}
/* We now own it */
shared->writing = chip;
if (mode == FL_ERASING)
shared->erasing = chip;
}
/* We now own it */
shared->writing = chip;
if (mode == FL_ERASING)
shared->erasing = chip;
- if (contender && contender != chip)
- spin_unlock(contender->mutex);
spin_unlock(&shared->lock);
}
spin_unlock(&shared->lock);
}
@@
-1021,8
+1020,8
@@
static void __xipram xip_udelay(struct map_info *map, struct flchip *chip,
#define XIP_INVAL_CACHED_RANGE(map, from, size) \
INVALIDATE_CACHED_RANGE(map, from, size)
#define XIP_INVAL_CACHED_RANGE(map, from, size) \
INVALIDATE_CACHED_RANGE(map, from, size)
-#define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \
- UDELAY(map, chip, adr, usec)
+#define INVALIDATE_CACHE_UDELAY(map, chip,
cmd_adr,
adr, len, usec) \
+ UDELAY(map, chip,
cmd_
adr, usec)
/*
* Extra notes:
/*
* Extra notes:
@@
-1054,7
+1053,7
@@
do { \
spin_lock(chip->mutex); \
} while (0)
spin_lock(chip->mutex); \
} while (0)
-#define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \
+#define INVALIDATE_CACHE_UDELAY(map, chip,
cmd_adr,
adr, len, usec) \
do { \
spin_unlock(chip->mutex); \
INVALIDATE_CACHED_RANGE(map, adr, len); \
do { \
spin_unlock(chip->mutex); \
INVALIDATE_CACHED_RANGE(map, adr, len); \
@@
-1286,7
+1285,7
@@
static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
map_write(map, datum, adr);
chip->state = mode;
map_write(map, datum, adr);
chip->state = mode;
- INVALIDATE_CACHE_UDELAY(map, chip,
+ INVALIDATE_CACHE_UDELAY(map, chip,
adr,
adr, map_bankwidth(map),
chip->word_write_time);
adr, map_bankwidth(map),
chip->word_write_time);
@@
-1574,8
+1573,8
@@
static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
map_write(map, CMD(0xd0), cmd_adr);
chip->state = FL_WRITING;
map_write(map, CMD(0xd0), cmd_adr);
chip->state = FL_WRITING;
- INVALIDATE_CACHE_UDELAY(map, chip,
-
cmd_
adr, len,
+ INVALIDATE_CACHE_UDELAY(map, chip,
cmd_adr,
+ adr, len,
chip->buffer_write_time);
timeo = jiffies + (HZ/2);
chip->buffer_write_time);
timeo = jiffies + (HZ/2);
@@
-1746,7
+1745,7
@@
static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
chip->state = FL_ERASING;
chip->erase_suspended = 0;
chip->state = FL_ERASING;
chip->erase_suspended = 0;
- INVALIDATE_CACHE_UDELAY(map, chip,
+ INVALIDATE_CACHE_UDELAY(map, chip,
adr,
adr, len,
chip->erase_time*1000/2);
adr, len,
chip->erase_time*1000/2);