From patchwork Tue Feb 6 17:40:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Agner X-Patchwork-Id: 869962 X-Patchwork-Delegate: boris.brezillon@free-electrons.com 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="BKOTOotn"; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=agner.ch header.i=@agner.ch header.b="ai2yIx0W"; 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 3zbWvh1XP3z9ryk for ; Wed, 7 Feb 2018 04:40:48 +1100 (AEDT) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=qZPR93ktUt3k7IQ7Gb1EmmdyEwHTXvwP5inBx+w5OE0=; b=BKO TOotn+qOtU3PdzA6VADJYXi3gugqGIcRya2DlX5yyP83D/goJxMrrP9fV4GyTSsqks2Eu/cjlgP5u yoJK6a5D5KhMaGzTzotzABe24nSmc/IZx4aC9I9O/4/NQLzGB3HFF18LdYIUOm4NRyS1s339pw3um 4ubKX07QNQC7u8mLJ/9HphlqTQHY12gFnhUp1Fos0CTb6c9kwIdFRG9KgAtZqtIVsfU5S6c2U9VZM Jsp0urwqTyMuAjuZKMBjLW7tyGXpR1DF6CcmJ38GY+1Qow0mzOlFZQkAdd+M97b/QRA3KTDrQDtBn klT1VtEI3mYP90BEMOnu75AVBPcCjDw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1ej7EY-00028r-PI; Tue, 06 Feb 2018 17:40:42 +0000 Received: from mail.kmu-office.ch ([2a02:418:6a02::a2]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1ej7EV-00026A-KN for linux-mtd@lists.infradead.org; Tue, 06 Feb 2018 17:40:41 +0000 Received: from trochilidae.toradex.int (unknown [46.140.72.82]) by mail.kmu-office.ch (Postfix) with ESMTPSA id 81D115C0D58; Tue, 6 Feb 2018 18:33:02 +0100 (CET) From: Stefan Agner To: han.xu@nxp.com, boris.brezillon@free-electrons.com Subject: [PATCH 1/2] dt-bindings: mtd: gpmi-nand: specify fsl, use-minimum-ecc behavior Date: Tue, 6 Feb 2018 18:40:20 +0100 Message-Id: <20180206174021.5947-1-stefan@agner.ch> X-Mailer: git-send-email 2.16.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=agner.ch; s=dkim; t=1517938382; bh=l2orBtlnKIC5oJ2Q1QopbARUlAY9ase1YapJN3yvttw=; h=From:To:Cc:Subject:Date:Message-Id; b=ai2yIx0W60Jf74GMxf/Cy1Pk3qSQ8VLrRpziiafpCCkIbXEXFotzlp7WDNTcCtvvwPASTviGjf+y2jSQ8CTlP2vMr4eZmxRnmxV4Ni9mwliyD86spCgRvrUxXKhmiwUpq/P5rU9Zg3nB2AuPmaHpL9kK+eGJeertEntJMctmbGA= X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: max.oss.09@gmail.com, richard@nod.at, linux-kernel@vger.kernel.org, Stefan Agner , marek.vasut@gmail.com, linux-mtd@lists.infradead.org, cyrille.pitchen@wedev4u.fr, dwmw2@infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The dt property fsl,use-minimum-ecc requires a NAND chip to provide a ECC strength/step size, otherwise the driver fails to probe. This is by design to avoid that the driver uses a fallback and later changes ECC parameters due to additionion of a NAND chip driver. Document the current behavior. Signed-off-by: Stefan Agner --- Documentation/devicetree/bindings/mtd/gpmi-nand.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/mtd/gpmi-nand.txt b/Documentation/devicetree/bindings/mtd/gpmi-nand.txt index b289ef3c1b7e..eb2d9919d063 100644 --- a/Documentation/devicetree/bindings/mtd/gpmi-nand.txt +++ b/Documentation/devicetree/bindings/mtd/gpmi-nand.txt @@ -34,9 +34,8 @@ Optional properties: automatically discoverable for some flash (e.g., according to the ONFI standard). However, note that if this strength is not - discoverable or this property is not enabled, - the software may chooses an implementation-defined - ECC scheme. + discoverable the driver will fail probing with + an error. - fsl,no-blockmark-swap: Don't swap the bad block marker from the OOB area with the byte in the data area but rely on the flash based BBT for identifying bad blocks. From patchwork Tue Feb 6 17:40:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Agner X-Patchwork-Id: 869963 X-Patchwork-Delegate: boris.brezillon@free-electrons.com 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="lf3mQ7wJ"; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=agner.ch header.i=@agner.ch header.b="pb80a+HC"; 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 3zbWvt3Qgyz9ryk for ; Wed, 7 Feb 2018 04:40:58 +1100 (AEDT) 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:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=1KsruS1S/dpmxEGWONqwJmCuSKiwuBzm6Zu5dLRKQnI=; b=lf3mQ7wJgJib3sy60rnqerxEQx 6B+BlhjUuUOsJcSepmlLcB92j4RyhBOxp3ZgMFboGmd6RM6sHMgKPTzlu4kpPfpC9tfp77FxfRyFX Dl1DURr+sE93h61r2aPNLBZicCdDWnelaHzg5KFMwuVJbxUCrI/mHttXTyOxe8XaMc/OTVw4lq969 TsHn3k5SQY7TDKcmZbLvLur5hOf2OYZ7X0uDaSaT1gJGJjqx+DRqq7vF1GgQ4IQNGCD03gVDAP3c6 vYPj45D2lGY3K78HKq8ia1Vrn9CqDbvs7eva0euqCZxguVI+MKznAT/Ry0Nbxe0bOAh5Hyi5xcZJk CxyK/syw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1ej7Ei-0002J4-7B; Tue, 06 Feb 2018 17:40:52 +0000 Received: from mail.kmu-office.ch ([2a02:418:6a02::a2]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1ej7EV-000269-KO for linux-mtd@lists.infradead.org; Tue, 06 Feb 2018 17:40:41 +0000 Received: from trochilidae.toradex.int (unknown [46.140.72.82]) by mail.kmu-office.ch (Postfix) with ESMTPSA id D794D5C0EFE; Tue, 6 Feb 2018 18:33:02 +0100 (CET) From: Stefan Agner To: han.xu@nxp.com, boris.brezillon@free-electrons.com Subject: [PATCH 2/2] mtd: nand: gpmi: add support for specific ECC strength Date: Tue, 6 Feb 2018 18:40:21 +0100 Message-Id: <20180206174021.5947-2-stefan@agner.ch> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180206174021.5947-1-stefan@agner.ch> References: <20180206174021.5947-1-stefan@agner.ch> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=agner.ch; s=dkim; t=1517938383; bh=jVR8ZfyK4qgib9P/qUSr3SD/blggnmH/1LR1xIFYDsA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=pb80a+HCqD7w1FW6hR8/xPWDHBbGzzl3m+WV/bVCrvs4y+AnAX4dnRTUDbo/doErB3lJHZJRoIjdA26/7N+jgVy/xi2p+csj4wHSy8aCvIatUsfWTZNBIAcAI7oOoZYz0EH/xSstzjzRUq/jfwvgsRPF4ZFTuYvI6v64qTrh/Ws= X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 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: max.oss.09@gmail.com, richard@nod.at, linux-kernel@vger.kernel.org, Stefan Agner , marek.vasut@gmail.com, linux-mtd@lists.infradead.org, cyrille.pitchen@wedev4u.fr, dwmw2@infradead.org MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add support for specified ECC strength/size using device tree properties nand-ecc-strength/nand-ecc-step-size. Signed-off-by: Stefan Agner --- .../devicetree/bindings/mtd/gpmi-nand.txt | 5 ++++ drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 29 ++++++++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Documentation/devicetree/bindings/mtd/gpmi-nand.txt b/Documentation/devicetree/bindings/mtd/gpmi-nand.txt index eb2d9919d063..ea6e9b735160 100644 --- a/Documentation/devicetree/bindings/mtd/gpmi-nand.txt +++ b/Documentation/devicetree/bindings/mtd/gpmi-nand.txt @@ -46,6 +46,11 @@ Optional properties: partitions written from Linux with this feature turned on may not be accessible by the BootROM code. + - nand-ecc-strength: integer representing the number of bits to correct + per ECC step. Needs to be a multiple of 2. + - nand-ecc-step-size: integer representing the number of data bytes + that are covered by a single ECC step. The driver + supports 512 and 1024. The device tree may optionally contain sub-nodes describing partitions of the address space. See partition.txt for more detail. diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c index 50f8d4a1b983..8cb378358e11 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c @@ -198,17 +198,15 @@ static inline bool gpmi_check_ecc(struct gpmi_nand_data *this) * * We may have available oob space in this case. */ -static int set_geometry_by_ecc_info(struct gpmi_nand_data *this) +static int set_geometry_by_ecc_info(struct gpmi_nand_data *this, + unsigned int ecc_strength, unsigned int ecc_step) { struct bch_geometry *geo = &this->bch_geometry; struct nand_chip *chip = &this->nand; struct mtd_info *mtd = nand_to_mtd(chip); unsigned int block_mark_bit_offset; - if (!(chip->ecc_strength_ds > 0 && chip->ecc_step_ds > 0)) - return -EINVAL; - - switch (chip->ecc_step_ds) { + switch (ecc_step) { case SZ_512: geo->gf_len = 13; break; @@ -221,8 +219,8 @@ static int set_geometry_by_ecc_info(struct gpmi_nand_data *this) chip->ecc_strength_ds, chip->ecc_step_ds); return -EINVAL; } - geo->ecc_chunk_size = chip->ecc_step_ds; - geo->ecc_strength = round_up(chip->ecc_strength_ds, 2); + geo->ecc_chunk_size = ecc_step; + geo->ecc_strength = round_up(ecc_strength, 2); if (!gpmi_check_ecc(this)) return -EINVAL; @@ -230,7 +228,7 @@ static int set_geometry_by_ecc_info(struct gpmi_nand_data *this) if (geo->ecc_chunk_size < mtd->oobsize) { dev_err(this->dev, "unsupported nand chip. ecc size: %d, oob size : %d\n", - chip->ecc_step_ds, mtd->oobsize); + ecc_step, mtd->oobsize); return -EINVAL; } @@ -423,9 +421,20 @@ static int legacy_set_geometry(struct gpmi_nand_data *this) int common_nfc_set_geometry(struct gpmi_nand_data *this) { + struct nand_chip *chip = &this->nand; + + if (chip->ecc.strength > 0 && chip->ecc.size > 0) + return set_geometry_by_ecc_info(this, chip->ecc.strength, + chip->ecc.size); + if ((of_property_read_bool(this->dev->of_node, "fsl,use-minimum-ecc")) - || legacy_set_geometry(this)) - return set_geometry_by_ecc_info(this); + || legacy_set_geometry(this)) { + if (!(chip->ecc_strength_ds > 0 && chip->ecc_step_ds > 0)) + return -EINVAL; + + return set_geometry_by_ecc_info(this, chip->ecc_strength_ds, + chip->ecc_step_ds); + } return 0; }