* [PATCH] Simplify write buffer size calculation by using mtd->writebufsize.
@ 2011-02-11 15:53 Guillaume LECERF
2011-02-11 15:55 ` Artem Bityutskiy
0 siblings, 1 reply; 2+ messages in thread
From: Guillaume LECERF @ 2011-02-11 15:53 UTC (permalink / raw)
To: linux-mtd; +Cc: Anatolij Gustschin, Artem Bityutskiy
This patch applies on top of "[PATCH 2/2] mtd: cfi: fix writebufsize initialization" by Anatolij Gustschin <agust@denx.de>.
Signed-off-by: Guillaume LECERF <glecerf@gmail.com>
---
drivers/mtd/chips/cfi_cmdset_0001.c | 13 ++++++-------
drivers/mtd/chips/cfi_cmdset_0002.c | 3 +--
drivers/mtd/chips/cfi_cmdset_0020.c | 16 ++++++++--------
3 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
index 178f87b..7d6a752 100644
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
@@ -1643,23 +1643,23 @@ static int cfi_intelext_write_words (struct mtd_info *mtd, loff_t to , size_t le
}
-static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
+static int __xipram do_write_buffer(struct mtd_info *mtd, struct flchip *chip,
unsigned long adr, const struct kvec **pvec,
unsigned long *pvec_seek, int len)
{
+ struct map_info *map = mtd->priv;
struct cfi_private *cfi = map->fldrv_priv;
map_word status, write_cmd, datum;
unsigned long cmd_adr;
- int ret, wbufsize, word_gap, words;
+ int ret, word_gap, words;
const struct kvec *vec;
unsigned long vec_seek;
unsigned long initial_adr;
int initial_len = len;
- wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
adr += chip->start;
initial_adr = adr;
- cmd_adr = adr & ~(wbufsize-1);
+ cmd_adr = adr & ~(mtd->writebufsize - 1);
/* Let's determine this according to the interleave only once */
write_cmd = (cfi->cfiq->P_ID != P_ID_INTEL_PERFORMANCE) ? CMD(0xe8) : CMD(0xe9);
@@ -1807,7 +1807,6 @@ static int cfi_intelext_writev (struct mtd_info *mtd, const struct kvec *vecs,
{
struct map_info *map = mtd->priv;
struct cfi_private *cfi = map->fldrv_priv;
- int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
int ret = 0;
int chipnum;
unsigned long ofs, vec_seek, i;
@@ -1826,11 +1825,11 @@ static int cfi_intelext_writev (struct mtd_info *mtd, const struct kvec *vecs,
do {
/* We must not cross write block boundaries */
- int size = wbufsize - (ofs & (wbufsize-1));
+ int size = mtd->writebufsize - (ofs & (mtd->writebufsize - 1));
if (size > len)
size = len;
- ret = do_write_buffer(map, &cfi->chips[chipnum],
+ ret = do_write_buffer(mtd, &cfi->chips[chipnum],
ofs, &vecs, &vec_seek, size);
if (ret)
return ret;
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
index 7e9c4e9..27e7787 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -1492,7 +1492,6 @@ static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
{
struct map_info *map = mtd->priv;
struct cfi_private *cfi = map->fldrv_priv;
- int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
int ret = 0;
int chipnum;
unsigned long ofs;
@@ -1528,7 +1527,7 @@ static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
/* Write buffer is worth it only if more than one word to write... */
while (len >= map_bankwidth(map) * 2) {
/* We must not cross write block boundaries */
- int size = wbufsize - (ofs & (wbufsize-1));
+ int size = mtd->writebufsize - (ofs & (mtd->writebufsize - 1));
if (size > len)
size = len;
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c
index ed56ad3..fdce65c 100644
--- a/drivers/mtd/chips/cfi_cmdset_0020.c
+++ b/drivers/mtd/chips/cfi_cmdset_0020.c
@@ -419,22 +419,22 @@ static int cfi_staa_read (struct mtd_info *mtd, loff_t from, size_t len, size_t
return ret;
}
-static inline int do_write_buffer(struct map_info *map, struct flchip *chip,
+static inline int do_write_buffer(struct mtd_info *mtd, struct flchip *chip,
unsigned long adr, const u_char *buf, int len)
{
+ struct map_info *map = mtd->priv;
struct cfi_private *cfi = map->fldrv_priv;
map_word status, status_OK;
unsigned long cmd_adr, timeo;
DECLARE_WAITQUEUE(wait, current);
- int wbufsize, z;
+ int z;
/* M58LW064A requires bus alignment for buffer wriets -- saw */
if (adr & (map_bankwidth(map)-1))
return -EINVAL;
- wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
adr += chip->start;
- cmd_adr = adr & ~(wbufsize-1);
+ cmd_adr = adr & ~(mtd->writebufsize - 1);
/* Let's determine this according to the interleave only once */
status_OK = CMD(0x80);
@@ -610,7 +610,6 @@ static int cfi_staa_write_buffers (struct mtd_info *mtd, loff_t to,
{
struct map_info *map = mtd->priv;
struct cfi_private *cfi = map->fldrv_priv;
- int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
int ret = 0;
int chipnum;
unsigned long ofs;
@@ -624,19 +623,20 @@ static int cfi_staa_write_buffers (struct mtd_info *mtd, loff_t to,
#ifdef DEBUG_CFI_FEATURES
printk("%s: map_bankwidth(map)[%x]\n", __func__, map_bankwidth(map));
- printk("%s: chipnum[%x] wbufsize[%x]\n", __func__, chipnum, wbufsize);
+ printk(KERN_DEBUG "%s: chipnum[%x] mtd->writebufsize[%x]\n", __func__,
+ chipnum, mtd->writebufsize);
printk("%s: ofs[%x] len[%x]\n", __func__, ofs, len);
#endif
/* Write buffer is worth it only if more than one word to write... */
while (len > 0) {
/* We must not cross write block boundaries */
- int size = wbufsize - (ofs & (wbufsize-1));
+ int size = mtd->writebufsize - (ofs & (mtd->writebufsize - 1));
if (size > len)
size = len;
- ret = do_write_buffer(map, &cfi->chips[chipnum],
+ ret = do_write_buffer(mtd, &cfi->chips[chipnum],
ofs, buf, size);
if (ret)
return ret;
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] Simplify write buffer size calculation by using mtd->writebufsize.
2011-02-11 15:53 [PATCH] Simplify write buffer size calculation by using mtd->writebufsize Guillaume LECERF
@ 2011-02-11 15:55 ` Artem Bityutskiy
0 siblings, 0 replies; 2+ messages in thread
From: Artem Bityutskiy @ 2011-02-11 15:55 UTC (permalink / raw)
To: Guillaume LECERF; +Cc: Anatolij Gustschin, linux-mtd
On Fri, 2011-02-11 at 16:53 +0100, Guillaume LECERF wrote:
> This patch applies on top of "[PATCH 2/2] mtd: cfi: fix writebufsize initialization" by Anatolij Gustschin <agust@denx.de>.
>
>
> Signed-off-by: Guillaume LECERF <glecerf@gmail.com>
> ---
> drivers/mtd/chips/cfi_cmdset_0001.c | 13 ++++++-------
> drivers/mtd/chips/cfi_cmdset_0002.c | 3 +--
> drivers/mtd/chips/cfi_cmdset_0020.c | 16 ++++++++--------
> 3 files changed, 15 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
> index 178f87b..7d6a752 100644
> --- a/drivers/mtd/chips/cfi_cmdset_0001.c
> +++ b/drivers/mtd/chips/cfi_cmdset_0001.c
> @@ -1643,23 +1643,23 @@ static int cfi_intelext_write_words (struct mtd_info *mtd, loff_t to , size_t le
> }
>
>
> -static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
> +static int __xipram do_write_buffer(struct mtd_info *mtd, struct flchip *chip,
> unsigned long adr, const struct kvec **pvec,
> unsigned long *pvec_seek, int len)
> {
> + struct map_info *map = mtd->priv;
> struct cfi_private *cfi = map->fldrv_priv;
> map_word status, write_cmd, datum;
> unsigned long cmd_adr;
> - int ret, wbufsize, word_gap, words;
> + int ret, word_gap, words;
> const struct kvec *vec;
> unsigned long vec_seek;
> unsigned long initial_adr;
> int initial_len = len;
>
> - wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
> adr += chip->start;
> initial_adr = adr;
> - cmd_adr = adr & ~(wbufsize-1);
> + cmd_adr = adr & ~(mtd->writebufsize - 1);
It feels like bad layering when drivers use fields like
'mtd->writesize'. I know we do this all over the place, but I think
drivers should not really rely on the contents of the "mtd->" object and
has all the needed data in private objects.
--
Best Regards,
Artem Bityutskiy (Артём Битюцкий)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-02-11 15:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-11 15:53 [PATCH] Simplify write buffer size calculation by using mtd->writebufsize Guillaume LECERF
2011-02-11 15:55 ` Artem Bityutskiy
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.