From patchwork Fri Jul 28 19:13:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Boris Brezillon X-Patchwork-Id: 795004 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=65.50.211.133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hu/QXFKy"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xJz5q37tRz9s7m for ; Sat, 29 Jul 2017 05:13:35 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=68YcYtHkPWf1LK/C6XZFc7754yjS4PX+tQ2Xw9Vb8G0=; b=hu/QXFKysVcGFY HrAV0Q51h3S5FzzF/fgea+c96hoIW2VUnG8WwlqfgMgJBB9g4KkMAV1UFJiA4owFu3h8LH+tCwLcp f2l0QqMytRYqZLt2Yo4Wv8iajBdkTu5OnOS57bpo7jL1lM9nPb0FKxx5ZlfUed0jAHw1yw+WfKt8r PtQVgFvKJjF6ak1bmG2MDngmA7MFxyowU0/QVuuas/rZ/XwEb317swe5B2OsvIM6YPKBf/Sx9wGzM gNSbrwV0M9tCO2lZm4HaHSvQ+XoF6HfI7hym+BRfZDhsHrPeEt2jmr0b/LZ1ueOy+lXjMDpc37vgu 5zH5SObp3+P90y9GiLDA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dbAhT-0007JX-Gg; Fri, 28 Jul 2017 19:13:27 +0000 Received: from mail.free-electrons.com ([62.4.15.54]) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dbAhP-0007Hj-93 for linux-mtd@lists.infradead.org; Fri, 28 Jul 2017 19:13:26 +0000 Received: by mail.free-electrons.com (Postfix, from userid 110) id 65CF7208A5; Fri, 28 Jul 2017 21:13:00 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.free-electrons.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT shortcircuit=ham autolearn=disabled version=3.4.0 Received: from bbrezillon (unknown [91.160.177.164]) by mail.free-electrons.com (Postfix) with ESMTPSA id 408E220861; Fri, 28 Jul 2017 21:13:00 +0200 (CEST) Date: Fri, 28 Jul 2017 21:13:01 +0200 From: Boris Brezillon To: Alexander Dahl Subject: Re: mtd: nand: atmel: probe of Spansion S34ML02G1 fails Message-ID: <20170728211301.10d25227@bbrezillon> In-Reply-To: <2274647.ublHvqEhgW@ada> References: <5326598.QgYTQxcFMR@ada> <9879279.x3T2Y4a6KK@ada> <20170726203326.2159f0cc@bbrezillon> <2274647.ublHvqEhgW@ada> X-Mailer: Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170728_121323_657540_F4BE9FBF X-CRM114-Status: GOOD ( 17.15 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , linux-mtd@lists.infradead.org Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Le Fri, 28 Jul 2017 15:15:25 +0200, Alexander Dahl a écrit : > Hello Boris, > > Am Mittwoch, 26. Juli 2017, 20:33:26 schrieb Boris Brezillon: > > Okay, first thing to test: revert f9ce2eddf176 ("mtd: nand: atmel: Add > > ->setup_data_interface() hooks"). You may have to revert other > > commits to compile the driver. > > > > If it works, I'd like you to drop SMC timings in both situations (with > > and without this commit). > > > > I'd also like to to dump NAND timings (those passed to > > ->setup_data_interface()). > > So based on those three atmel-ebi patches from earlier this week I used > the attached patch to dump the nand timings and smc settings before the > get applied. clk mck runs at 132096000 Hz (slow_xtal 32768, main_xtal > 18432000). Previously clock settings for NAND were set in (very old) U- > Boot to this (double checked, Linux didn't touch it): > > U-Boot> md.l 0xffffef1c 1 > ffffef1c: 0001000a .... > U-Boot> md.l 0xffffec30 4 > ffffec30: 00010001 03030303 00050005 00020003 ................ > > So setup, pulse, cycle, tdf all to quite low number of clock cycles, but > as far as I can tell this worked with all flash chips we had connected > over the years. > > Now with the old Hynix flash chip, I get the following: > > atmel-nand-controller 10000000.ebi:nand-controller: atmel_smc_nand_setup_data_interface(csline: 0, type: 0) > atmel-nand-controller 10000000.ebi:nand-controller: tBERS_max: 0, tCCS_min: 500000, tPROG_max: 0, tR_max: 200000000 > atmel-nand-controller 10000000.ebi:nand-controller: tALH_min: 20000, tADL_min: 400000, tALS_min: 50000, tAR_min: 25000 > atmel-nand-controller 10000000.ebi:nand-controller: tCEA_max: 100000, tCEH_min: 20000, tCH_min: 20000, tCHZ_max: 100000 > atmel-nand-controller 10000000.ebi:nand-controller: tCLH_min: 20000, tCLR_min: 20000, tCLS_min: 50000, tCOH_min: 0 > atmel-nand-controller 10000000.ebi:nand-controller: tCS_min: 70000, tDH_min: 20000, tDS_min: 40000, tFEAT_max: 1000000 > atmel-nand-controller 10000000.ebi:nand-controller: tIR_min: 10000, tITC_max: 1000000, tRC_min: 100000, tREA_max: 40000 > atmel-nand-controller 10000000.ebi:nand-controller: tREH_min: 30000, tRHOH_min: 0, tRHW_min: 200000, tRHZ_max: 200000 > atmel-nand-controller 10000000.ebi:nand-controller: tRLOH_min: 0, tRP_min: 50000, tRR_min: 40000, tRST_max: 250000000000 > atmel-nand-controller 10000000.ebi:nand-controller: tWB_max: 200000, tWC_min: 100000, tWH_min: 30000, tWHR_min: 120000 > atmel-nand-controller 10000000.ebi:nand-controller: tWP_min: 50000, tWW_min: 100000 > atmel-nand-controller 10000000.ebi:nand-controller: smcconf: setup: 0x00000002, pulse: 0x0f080f08, cycle: 0x000f000f, timings: 0x88060483, mode: 0x001f0003 > nand: Could not find valid ONFI parameter page; aborting > nand: device found, Manufacturer ID: 0xad, Chip ID: 0xda > nand: Hynix NAND 256MiB 3,3V 8-bit > nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 > > $ devmem 0xffffef1c > 0x0001000A > $ devmem 0xffffec30 > 0x00000002 > $ devmem 0xffffec34 > 0x0F080F08 > $ devmem 0xffffec38 > 0x000F000F > $ devmem 0xffffec3c > 0x001F0003 > > To me those values look like some kind of defaults every nand chip should run with? > > The failing Spansion chip here: > > atmel-nand-controller 10000000.ebi:nand-controller: atmel_smc_nand_setup_data_interface(csline: 0, type: 0) > atmel-nand-controller 10000000.ebi:nand-controller: tBERS_max: 0, tCCS_min: 500000, tPROG_max: 0, tR_max: 200000000 > atmel-nand-controller 10000000.ebi:nand-controller: tALH_min: 20000, tADL_min: 400000, tALS_min: 50000, tAR_min: 25000 > atmel-nand-controller 10000000.ebi:nand-controller: tCEA_max: 100000, tCEH_min: 20000, tCH_min: 20000, tCHZ_max: 100000 > atmel-nand-controller 10000000.ebi:nand-controller: tCLH_min: 20000, tCLR_min: 20000, tCLS_min: 50000, tCOH_min: 0 > atmel-nand-controller 10000000.ebi:nand-controller: tCS_min: 70000, tDH_min: 20000, tDS_min: 40000, tFEAT_max: 1000000 > atmel-nand-controller 10000000.ebi:nand-controller: tIR_min: 10000, tITC_max: 1000000, tRC_min: 100000, tREA_max: 40000 > atmel-nand-controller 10000000.ebi:nand-controller: tREH_min: 30000, tRHOH_min: 0, tRHW_min: 200000, tRHZ_max: 200000 > atmel-nand-controller 10000000.ebi:nand-controller: tRLOH_min: 0, tRP_min: 50000, tRR_min: 40000, tRST_max: 250000000000 > atmel-nand-controller 10000000.ebi:nand-controller: tWB_max: 200000, tWC_min: 100000, tWH_min: 30000, tWHR_min: 120000 > atmel-nand-controller 10000000.ebi:nand-controller: tWP_min: 50000, tWW_min: 100000 > atmel-nand-controller 10000000.ebi:nand-controller: smcconf: setup: 0x00000002, pulse: 0x0f080f08, cycle: 0x000f000f, timings: 0x88060483, mode: 0x001f0003 > nand: device found, Manufacturer ID: 0x01, Chip ID: 0xda > nand: AMD/Spansion S34ML02G1 > nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 > atmel-nand-controller 10000000.ebi:nand-controller: atmel_smc_nand_setup_data_interface(csline: -1, type: 0) > atmel-nand-controller 10000000.ebi:nand-controller: tBERS_max: 1410065408, tCCS_min: 100000, tPROG_max: 700000000, tR_max: 25000000 > atmel-nand-controller 10000000.ebi:nand-controller: tALH_min: 5000, tADL_min: 400000, tALS_min: 10000, tAR_min: 10000 > atmel-nand-controller 10000000.ebi:nand-controller: tCEA_max: 25000, tCEH_min: 20000, tCH_min: 5000, tCHZ_max: 30000 > atmel-nand-controller 10000000.ebi:nand-controller: tCLH_min: 5000, tCLR_min: 10000, tCLS_min: 10000, tCOH_min: 15000 > atmel-nand-controller 10000000.ebi:nand-controller: tCS_min: 20000, tDH_min: 5000, tDS_min: 10000, tFEAT_max: 1000000 > atmel-nand-controller 10000000.ebi:nand-controller: tIR_min: 0, tITC_max: 1000000, tRC_min: 25000, tREA_max: 20000 > atmel-nand-controller 10000000.ebi:nand-controller: tREH_min: 10000, tRHOH_min: 15000, tRHW_min: 100000, tRHZ_max: 100000 > atmel-nand-controller 10000000.ebi:nand-controller: tRLOH_min: 5000, tRP_min: 12000, tRR_min: 20000, tRST_max: 500000000 > atmel-nand-controller 10000000.ebi:nand-controller: tWB_max: 100000, tWC_min: 25000, tWH_min: 10000, tWHR_min: 80000 > atmel-nand-controller 10000000.ebi:nand-controller: tWP_min: 12000, tWW_min: 100000 > atmel-nand-controller 10000000.ebi:nand-controller: smcconf: setup: 0x00000001, pulse: 0x05020502, cycle: 0x00050005, timings: 0x88030282, mode: 0x001b0003 Hm, ok. It seems that we're accepting mode 4 even though the controller is not supporting EDO mode which mandatory for mode 4 and 5. Can you try with the following patch? Timings are expressed in picoseconds and this test was testing against a value expressed in nanoseconds. BTW, did you try to comment the line I pointed out yesterday? I'd like to be sure this is a timing issue. --->8--- diff --git a/drivers/mtd/nand/atmel/nand-controller.c b/drivers/mtd/nand/atmel/nand-controller.c index d922a88e407f..2c8baa0c2c4e 100644 --- a/drivers/mtd/nand/atmel/nand-controller.c +++ b/drivers/mtd/nand/atmel/nand-controller.c @@ -1201,7 +1201,7 @@ static int atmel_smc_nand_prepare_smcconf(struct atmel_nand *nand, * tRC < 30ns implies EDO mode. This controller does not support this * mode. */ - if (conf->timings.sdr.tRC_min < 30) + if (conf->timings.sdr.tRC_min < 30000) return -ENOTSUPP; atmel_smc_cs_conf_init(smcconf);