From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
To: Arnaud Ebalard <arno@natisbad.org>
Cc: Lior Amsalem <alior@marvell.com>,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Jason Cooper <jason@lakedaemon.net>,
linux-mtd@lists.infradead.org,
Gregory Clement <gregory.clement@free-electrons.com>,
Brian Norris <computersforpeace@gmail.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v5 00/14] Armada 370/XP NAND support
Date: Wed, 4 Dec 2013 11:20:10 -0300 [thread overview]
Message-ID: <20131204142009.GB2486@localhost> (raw)
In-Reply-To: <87iov5aapx.fsf@natisbad.org>
Arnaud,
Thanks a lot for the patience!
On Tue, Dec 03, 2013 at 10:25:14PM +0100, Arnaud Ebalard wrote:
> Hi Ezequiel,
>
> arno@natisbad.org (Arnaud Ebalard) writes:
>
> > So I guess, if you have any (non hardware destructive ;-) ) idea, I now
> > have a platform on which the problem is reproducible. Meanwhile, I will
> > try and do the same on my RN104 (should be the same as the RN102).
>
> Well, on the RN104 (same chip, same kernel and same SoC as the RN102), I
> have the following (I get the same with a patched driver to increase the
> timeout):
>
> root@humble:~# flash_erase /dev/mtd4 0 0
> Erasing 128 Kibyte @ 72e0000 -- 99 % complete flash_erase: Skipping bad block at 07300000
> flash_erase: Skipping bad block at 07320000
> flash_erase: Skipping bad block at 07340000
> flash_erase: Skipping bad block at 07360000
> flash_erase: Skipping bad block at 07380000
> flash_erase: Skipping bad block at 073a0000
> flash_erase: Skipping bad block at 073c0000
> flash_erase: Skipping bad block at 073e0000
> Erasing 128 Kibyte @ 73e0000 -- 100 % complete
>
> root@humble:~# nandwrite -p /dev/mtd4 mtd4ro
> Writing data to block 0 at offset 0x0
> [ 449.915173] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 0, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 00000000 to 0x01ffff
> Writing data to block 1 at offset 0x20000
> [ 450.115172] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 1, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x020000 to 0x03ffff
> Writing data to block 2 at offset 0x40000
> [ 450.315171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 2, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x040000 to 0x05ffff
> Writing data to block 3 at offset 0x60000
> [ 450.515171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 3, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x060000 to 0x07ffff
> Writing data to block 4 at offset 0x80000
> [ 450.715169] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 4, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x080000 to 0x09ffff
> Writing data to block 5 at offset 0xa0000
> [ 450.915171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 5, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x0a0000 to 0x0bffff
> Writing data to block 6 at offset 0xc0000
> [ 451.115171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 6, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x0c0000 to 0x0dffff
> Writing data to block 7 at offset 0xe0000
>
>
So, let me confirm this: you have systematically obtained a "Ready
timeout" when writing to the device, on every single write to a page,
correct?
I'll prepare a patch against the branch we're working that adds lots of
pr_info(). It'll be very annoying for you, but it's the only way I can
think of, to get the driver's dirty inner sequence and to see *where*
is failing.
However, before that patch, please do a quick test for me. It's just a
shot in the dark. The below diff removes the NDCB0_AUTO_RS flag from
the PAGE_PROG command when the page size is 2048 byte (or less).
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index fd0ef93..038cf5d 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -831,7 +831,6 @@ static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
}
} else {
info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
- | NDCB0_AUTO_RS
| NDCB0_ST_ROW_EN
| NDCB0_DBC
| (NAND_CMD_PAGEPROG << 8)
Please apply this diff, and then try to write at least one page. If at
all possible you might try different approaches:
$ flash_erase /dev/mtd2 0 1
$ dd if=page.raw of=/dev/mtd2 bs=2048 count=1
$ flash_erase /dev/mtd2 0 1
$ nandwrite page.raw /dev/mtd2
Where page.raw is some 2048B file, which you can create with random junk in it.
Regards,
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
WARNING: multiple messages have this Message-ID (diff)
From: ezequiel.garcia@free-electrons.com (Ezequiel Garcia)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 00/14] Armada 370/XP NAND support
Date: Wed, 4 Dec 2013 11:20:10 -0300 [thread overview]
Message-ID: <20131204142009.GB2486@localhost> (raw)
In-Reply-To: <87iov5aapx.fsf@natisbad.org>
Arnaud,
Thanks a lot for the patience!
On Tue, Dec 03, 2013 at 10:25:14PM +0100, Arnaud Ebalard wrote:
> Hi Ezequiel,
>
> arno at natisbad.org (Arnaud Ebalard) writes:
>
> > So I guess, if you have any (non hardware destructive ;-) ) idea, I now
> > have a platform on which the problem is reproducible. Meanwhile, I will
> > try and do the same on my RN104 (should be the same as the RN102).
>
> Well, on the RN104 (same chip, same kernel and same SoC as the RN102), I
> have the following (I get the same with a patched driver to increase the
> timeout):
>
> root at humble:~# flash_erase /dev/mtd4 0 0
> Erasing 128 Kibyte @ 72e0000 -- 99 % complete flash_erase: Skipping bad block at 07300000
> flash_erase: Skipping bad block at 07320000
> flash_erase: Skipping bad block at 07340000
> flash_erase: Skipping bad block at 07360000
> flash_erase: Skipping bad block at 07380000
> flash_erase: Skipping bad block at 073a0000
> flash_erase: Skipping bad block at 073c0000
> flash_erase: Skipping bad block at 073e0000
> Erasing 128 Kibyte @ 73e0000 -- 100 % complete
>
> root at humble:~# nandwrite -p /dev/mtd4 mtd4ro
> Writing data to block 0 at offset 0x0
> [ 449.915173] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 0, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 00000000 to 0x01ffff
> Writing data to block 1 at offset 0x20000
> [ 450.115172] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 1, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x020000 to 0x03ffff
> Writing data to block 2 at offset 0x40000
> [ 450.315171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 2, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x040000 to 0x05ffff
> Writing data to block 3 at offset 0x60000
> [ 450.515171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 3, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x060000 to 0x07ffff
> Writing data to block 4 at offset 0x80000
> [ 450.715169] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 4, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x080000 to 0x09ffff
> Writing data to block 5 at offset 0xa0000
> [ 450.915171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 5, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x0a0000 to 0x0bffff
> Writing data to block 6 at offset 0xc0000
> [ 451.115171] pxa3xx-nand d00d0000.nand: Ready time out!!!
> libmtd: error!: cannot write 2048 bytes to mtd4 (eraseblock 6, offset 2048)
> error 5 (Input/output error)
> Erasing failed write from 0x0c0000 to 0x0dffff
> Writing data to block 7 at offset 0xe0000
>
>
So, let me confirm this: you have systematically obtained a "Ready
timeout" when writing to the device, on every single write to a page,
correct?
I'll prepare a patch against the branch we're working that adds lots of
pr_info(). It'll be very annoying for you, but it's the only way I can
think of, to get the driver's dirty inner sequence and to see *where*
is failing.
However, before that patch, please do a quick test for me. It's just a
shot in the dark. The below diff removes the NDCB0_AUTO_RS flag from
the PAGE_PROG command when the page size is 2048 byte (or less).
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index fd0ef93..038cf5d 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -831,7 +831,6 @@ static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
}
} else {
info->ndcb0 |= NDCB0_CMD_TYPE(0x1)
- | NDCB0_AUTO_RS
| NDCB0_ST_ROW_EN
| NDCB0_DBC
| (NAND_CMD_PAGEPROG << 8)
Please apply this diff, and then try to write@least one page. If at
all possible you might try different approaches:
$ flash_erase /dev/mtd2 0 1
$ dd if=page.raw of=/dev/mtd2 bs=2048 count=1
$ flash_erase /dev/mtd2 0 1
$ nandwrite page.raw /dev/mtd2
Where page.raw is some 2048B file, which you can create with random junk in it.
Regards,
--
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
next prev parent reply other threads:[~2013-12-04 14:20 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-14 21:25 [PATCH v5 00/14] Armada 370/XP NAND support Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 01/14] mtd: nand: pxa3xx: Use a completion to signal device ready Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 02/14] mtd: nand: pxa3xx: Use waitfunc() to wait for the device to be ready Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 03/14] mtd: nand: pxa3xx: Add bad block handling Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 22:12 ` Brian Norris
2013-11-14 22:12 ` Brian Norris
2013-11-14 22:37 ` Ezequiel Garcia
2013-11-14 22:37 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 04/14] mtd: nand: pxa3xx: Add driver-specific ECC BCH support Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 05/14] mtd: nand: pxa3xx: Clear cmd buffer #3 (NDCB3) on command start Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 22:18 ` Brian Norris
2013-11-14 22:18 ` Brian Norris
2013-11-14 21:25 ` [PATCH v5 06/14] mtd: nand: pxa3xx: Add helper function to set page address Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 07/14] mtd: nand: pxa3xx: Remove READ0 switch/case falltrough Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 08/14] mtd: nand: pxa3xx: Split prepare_command_pool() in two stages Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 09/14] mtd: nand: pxa3xx: Move the data buffer clean to prepare_start_command() Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 22:25 ` Brian Norris
2013-11-14 22:25 ` Brian Norris
2013-11-14 22:45 ` Ezequiel Garcia
2013-11-14 22:45 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 10/14] mtd: nand: pxa3xx: Fix SEQIN column address set Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 11/14] mtd: nand: pxa3xx: Add a read/write buffers markers Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 12/14] mtd: nand: pxa3xx: Introduce multiple page I/O support Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 22:40 ` Brian Norris
2013-11-14 22:40 ` Brian Norris
2013-11-14 23:02 ` Ezequiel Garcia
2013-11-14 23:02 ` Ezequiel Garcia
2013-11-14 23:07 ` Brian Norris
2013-11-14 23:07 ` Brian Norris
2013-11-14 21:25 ` [PATCH v5 13/14] mtd: nand: pxa3xx: Add multiple chunk write support Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 21:25 ` [PATCH v5 14/14] mtd: nand: pxa3xx: Add ECC BCH correctable errors detection Ezequiel Garcia
2013-11-14 21:25 ` Ezequiel Garcia
2013-11-14 23:04 ` [PATCH v5 00/14] Armada 370/XP NAND support Brian Norris
2013-11-14 23:04 ` Brian Norris
2013-11-14 23:05 ` Brian Norris
2013-11-14 23:05 ` Brian Norris
2013-11-14 23:15 ` Ezequiel Garcia
2013-11-14 23:15 ` Ezequiel Garcia
2013-11-14 23:17 ` Brian Norris
2013-11-14 23:17 ` Brian Norris
2013-11-15 7:59 ` Daniel Mack
2013-11-15 7:59 ` Daniel Mack
2013-11-15 13:07 ` Ezequiel Garcia
2013-11-15 13:07 ` Ezequiel Garcia
2013-11-15 13:47 ` Daniel Mack
2013-11-15 13:47 ` Daniel Mack
2013-11-15 14:27 ` Ezequiel Garcia
2013-11-15 14:27 ` Ezequiel Garcia
2013-11-15 14:30 ` Daniel Mack
2013-11-15 14:30 ` Daniel Mack
2013-11-15 18:05 ` Brian Norris
2013-11-15 18:05 ` Brian Norris
2013-11-15 18:35 ` Ezequiel Garcia
2013-11-15 18:35 ` Ezequiel Garcia
2013-11-24 14:08 ` Arnaud Ebalard
2013-11-24 14:08 ` Arnaud Ebalard
2013-11-24 14:22 ` Thomas Petazzoni
2013-11-24 14:22 ` Thomas Petazzoni
2013-11-25 12:03 ` Ezequiel Garcia
2013-11-25 12:03 ` Ezequiel Garcia
2013-11-25 23:04 ` Arnaud Ebalard
2013-11-25 23:04 ` Arnaud Ebalard
2013-11-26 12:40 ` Ezequiel Garcia
2013-11-26 12:40 ` Ezequiel Garcia
2013-11-27 20:24 ` Arnaud Ebalard
2013-11-27 20:24 ` Arnaud Ebalard
2013-11-27 20:52 ` Arnaud Ebalard
2013-11-27 20:52 ` Arnaud Ebalard
2013-11-28 7:48 ` Ricard Wanderlof
2013-11-28 7:48 ` Ricard Wanderlof
2013-11-28 18:50 ` Ezequiel Garcia
2013-11-28 18:50 ` Ezequiel Garcia
2013-11-29 23:25 ` Arnaud Ebalard
2013-11-29 23:25 ` Arnaud Ebalard
2013-12-02 10:33 ` Ezequiel Garcia
2013-12-02 10:33 ` Ezequiel Garcia
2013-12-02 21:05 ` Arnaud Ebalard
2013-12-02 21:05 ` Arnaud Ebalard
2013-12-03 0:22 ` Ezequiel Garcia
2013-12-03 0:22 ` Ezequiel Garcia
2013-12-03 20:21 ` Arnaud Ebalard
2013-12-03 20:21 ` Arnaud Ebalard
2013-12-03 21:25 ` Arnaud Ebalard
2013-12-03 21:25 ` Arnaud Ebalard
2013-12-04 14:20 ` Ezequiel Garcia [this message]
2013-12-04 14:20 ` Ezequiel Garcia
2013-12-04 14:41 ` Ezequiel Garcia
2013-12-04 14:41 ` Ezequiel Garcia
2013-12-04 20:48 ` Arnaud Ebalard
2013-12-04 20:48 ` Arnaud Ebalard
2013-12-05 20:42 ` Arnaud Ebalard
2013-12-05 20:42 ` Arnaud Ebalard
2013-12-05 22:24 ` [PATCH v5 00/14] Armada 370/XP NAND supportg Ezequiel Garcia
2013-12-05 22:24 ` Ezequiel Garcia
2013-12-06 12:56 ` [PATCH v5 00/14] Armada 370/XP NAND support Ezequiel Garcia
2013-12-06 12:56 ` Ezequiel Garcia
2013-12-06 21:41 ` Arnaud Ebalard
2013-12-06 21:41 ` Arnaud Ebalard
2013-12-06 22:05 ` Ezequiel Garcia
2013-12-06 22:05 ` Ezequiel Garcia
2013-12-05 21:32 ` Brian Norris
2013-12-05 21:32 ` Brian Norris
2013-12-05 21:23 ` Brian Norris
2013-12-05 21:23 ` Brian Norris
2013-12-05 22:23 ` Ezequiel Garcia
2013-12-05 22:23 ` Ezequiel Garcia
2013-12-05 22:45 ` Brian Norris
2013-12-05 22:45 ` Brian Norris
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131204142009.GB2486@localhost \
--to=ezequiel.garcia@free-electrons.com \
--cc=alior@marvell.com \
--cc=arno@natisbad.org \
--cc=computersforpeace@gmail.com \
--cc=gregory.clement@free-electrons.com \
--cc=jason@lakedaemon.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mtd@lists.infradead.org \
--cc=thomas.petazzoni@free-electrons.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.