From patchwork Wed Dec 4 14:20:10 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ezequiel Garcia X-Patchwork-Id: 3282841 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 1DA949F37A for ; Wed, 4 Dec 2013 14:34:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 57C5F204AF for ; Wed, 4 Dec 2013 14:34:34 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 72EE42015F for ; Wed, 4 Dec 2013 14:34:29 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VoDKc-0004zR-2V; Wed, 04 Dec 2013 14:21:39 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VoDJa-0005Ia-5H; Wed, 04 Dec 2013 14:20:34 +0000 Received: from top.free-electrons.com ([176.31.233.9] helo=mail.free-electrons.com) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VoDJW-0005Hc-RD; Wed, 04 Dec 2013 14:20:32 +0000 Received: by mail.free-electrons.com (Postfix, from userid 106) id B636679D; Wed, 4 Dec 2013 15:20:06 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from localhost (unknown [190.2.98.212]) by mail.free-electrons.com (Postfix) with ESMTPSA id A654A71B; Wed, 4 Dec 2013 15:20:03 +0100 (CET) Date: Wed, 4 Dec 2013 11:20:10 -0300 From: Ezequiel Garcia To: Arnaud Ebalard Subject: Re: [PATCH v5 00/14] Armada 370/XP NAND support Message-ID: <20131204142009.GB2486@localhost> References: <20131126124003.GA2344@localhost> <87zjopd240.fsf@natisbad.org> <87wqjtbm8r.fsf@natisbad.org> <20131128185040.GA13182@localhost> <87bo12kcyt.fsf@natisbad.org> <20131202103305.GB2466@localhost> <87siubneuf.fsf@natisbad.org> <20131203002225.GA5333@localhost> <87ob4xbs8l.fsf@natisbad.org> <87iov5aapx.fsf@natisbad.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87iov5aapx.fsf@natisbad.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20131204_092031_049053_85A45099 X-CRM114-Status: GOOD ( 21.68 ) X-Spam-Score: -1.2 (-) Cc: Lior Amsalem , Thomas Petazzoni , Jason Cooper , linux-mtd@lists.infradead.org, Gregory Clement , Brian Norris , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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). 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, Tested-by: Arnaud Ebalard 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)