From patchwork Fri Mar 25 21:14:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Xu X-Patchwork-Id: 1609585 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=hFJ9mG4m; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256 header.s=selector2 header.b=SDCNWUrR; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KQFHL199Tz9s0B for ; Sat, 26 Mar 2022 08:15:26 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :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=QFdVR8VukcxNFsz4/yMC844aSR91jvxhaxGOh+nQzOo=; b=hFJ9mG4muVQ332 tU0wn8PZ4FvILh2J9H3S61lW/KEawDr82vmAkEaO4omOEdzD54bcmCGc/x5jKovjC0HF6IHyyIxlR cRhG+q7xScxIIK2FgZ49lO1BEvSdhZJ9YKOhZq9mAtJby1YloK4uYM0NLgd1Dsms2exVAO9OfOgea uE8N7ahj7wAWTL8xiNW+hcZuwkzUqatNkWtfTy171HaQgkUaJSTcg6FZMSZjP9k4VUdiQwqrFC5LC TWRuklO+B393mW517Vj2dr+TQTcPseKnLdjbGKwByxv05XFxvNx8xkHgliMqEowLjpOAch0x+ffIx jYRlS02HC5rI8m4pPUDQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nXrGl-003Jod-1Y; Fri, 25 Mar 2022 21:14:51 +0000 Received: from mail-am6eur05on20614.outbound.protection.outlook.com ([2a01:111:f400:7e1b::614] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nXrGg-003JkO-Jm for linux-mtd@lists.infradead.org; Fri, 25 Mar 2022 21:14:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gQm1xmR6HfMEHOahBDhwupcZ6BCJ3XbDit7fvgHwdeOpY/ZzEj5PWQ/QaG4m82bkhs5scs4eQItytpDKMoWOgMAR+HQhf9FOOK9hcnYNBKhCg6z+Jkz0qrA5hE/Zx24ieYYSQXwRAgezX1Ccf4QYHiHUwTUXywW3QrO8i0p7YkpYSG6bbUYN+5WKDXKWWU3d+hJdd5da+G7e37C338wgtaX2Duw/8ThywDsNA3Wf8hWSmwe7dWse6mKfincL5skV6EY+8T8yN0Mt0zftvYOXB8vbobx4Lh4lnOo87YXZw7AqQxnBmRGzEjrw2K3lZroyWr7bTIxx1t7EeUWhe0Ie7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LHVfWG4GIYnsryba7r4Bf5MIS+6ZN05eyPh54mq/0jk=; b=SCW57MHCXEQQyB/m0yTpRW1HGja4B+Tg1l7fTk9jvujxA0nVoV/acQto6dVzHK9131DVppo+2iD8VjbZroPWLYjZHlSNp8CUljIaMNvTu9ohHUhwau/9p0nakg2J9uaup0uxseGGbBqbzzpztHecBXAw3pgrUadyuDUwg9xgal9tezXYk0Fc46ubdNj/GFHKACqpabwIlm0qZVN/802DDyR86Yz9NAXL/CosPWrDN1PaGREiJmDYc4kkjY1ni5OEADTDrrOA/kE0XU3Qwoax6Z1yfMHVJidML+EeqnO9N9HkmXzpFy7jnCkVU5z//UrcurTlKEmjTCi9qt86LUEmMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LHVfWG4GIYnsryba7r4Bf5MIS+6ZN05eyPh54mq/0jk=; b=SDCNWUrRr423GXeEWhJXME1F7Xs8zwhRoJvj9MJl5VYkpWGKjhe3vAOJz8xp9QQdOyCm9pKtlJQM2T0DUCXJJZL56A+4dIxxVUQgvrCjTAw5ePoN3jVerrPl8vyr0ys/bbOByp75xqSyCeGCBz/g2RZ1aGoYLGzc/VXdeU39VfI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DU2PR04MB8774.eurprd04.prod.outlook.com (2603:10a6:10:2e1::21) by DB3PR0402MB3881.eurprd04.prod.outlook.com (2603:10a6:8:12::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.19; Fri, 25 Mar 2022 21:14:33 +0000 Received: from DU2PR04MB8774.eurprd04.prod.outlook.com ([fe80::5416:5d1:cc34:ca9b]) by DU2PR04MB8774.eurprd04.prod.outlook.com ([fe80::5416:5d1:cc34:ca9b%7]) with mapi id 15.20.5102.019; Fri, 25 Mar 2022 21:14:33 +0000 From: Han Xu To: sbabic@denx.de, sean@geanix.com, frieder.schrempf@kontron.de, festevam@gmail.com Cc: ye.li@nxp.com, peng.fan@nxp.com, han.xu@nxp.com, miquel.raynal@bootlin.com, linux-mtd@lists.infradead.org Subject: [PATCH v2 1/2] mtd: rawnand: gpmi: Refactor bch geometry settings function Date: Fri, 25 Mar 2022 16:14:10 -0500 Message-Id: <20220325211411.30714-1-han.xu@nxp.com> X-Mailer: git-send-email 2.17.1 X-ClientProxiedBy: BYAPR01CA0057.prod.exchangelabs.com (2603:10b6:a03:94::34) To DU2PR04MB8774.eurprd04.prod.outlook.com (2603:10a6:10:2e1::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5bc62685-d67e-4388-6a56-08da0ea47542 X-MS-TrafficTypeDiagnostic: DB3PR0402MB3881:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OX+ltEK2zuqkPAsTlj4+XstUjL9pUvxJWgM5PiVY4aI8L3SvBOPPVPNZngSM38xzujCo7QheYExmw3+K4VyCSWncLrlEyCpDoYSl5TNMr2bJsVZYVH8/76rGMuvR72pB/TA46TvZm1xwrf0GKFBMs7PWnkgOjOk565EfyPHb0nyjrAoxfTkW/CgAGUIkfyRXRc4H88978OHMu0iYKteY0ddESZDXZOrXOp9XXUEa8l1TMjfNwbRVk1EZIXtsO5RVBuSYF9xmiBwDKnacm4FYRAPzIlud1PU8XMaTpPyz0gmvddL9IFb9YQ5bRursY7cbogkBxrh/F/MdKrqRlAf+4aAZyiCczI30D0RIeAkUKsBfo1PwhMcEsCIsWVCDvM42r0X0fwGSRJjlYATqlt3pRvudc6wxU+eASGe2QbmwGEBQZCOPmbpTpM/UYKZsnpt+z1AqDDmtgazjDYOr6zT7TxnJJjWdqsAcHtwkVk7I/xXXWR+m2i19yFiLombSS/h7BoYKegWudlNjNHoG5Cv3KoyUrSQ7yznc3YEuyLwwqzKlaoqCTmtpdy9sYHl+R4dS05ASpL4FAk0zfO6N8LeCp7RqGiClSVG9YdUFgvz4ho21QQwfJRS3ezhjpNbzGkR6mh5P6HVHO8RLgcQfcxAAPe2axXeSfc9wLAc8fKySozlZJ9eFQo4I4iIjswNOurL8sW+mthj9qWVq9N1ekSVXZw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8774.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(316002)(36756003)(83380400001)(186003)(44832011)(8676002)(66476007)(2616005)(4326008)(66556008)(66946007)(5660300002)(38100700002)(1076003)(6486002)(8936002)(6512007)(38350700002)(52116002)(2906002)(6506007)(26005)(86362001)(508600001)(6666004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SvAagNvFukpmmcz+MJh/gZNA5uSmguUxwkkHpoBdurPXTMl767zx631Vh6JaCrYIAynjDIKsIt1d4DkPugeS/6xqT6vjoijr1sr53p/u2TnAqR4ge1xm8L+u6aOQxxhnAfET5ppBoQydWXNelBl1hIpCLrIVRfd+jDzBerl31j1Gev6SEVDD2UAle9cbKukI2hiidAhEJGWsa76SJCJNi2HcCKMoKslXrSBGRBJCR6RVuEAUOFnsvGl1wcTd1tueyTcsl21iUjaGo6yNnMJ71Ih+teESjw75wEe+qdT4fJHcj+KMEDIBZthSHQPp+SV5hhg21teeCKflYQQFq5w8/kEAZJUum2vtccuky4bVHYlj9WHd6F7t6RSufhDIcoxi6RH0B+Yk6IFo0mAwsyYheGD+rOdJSlV7ounBpmIdy7O35wEOg3rfSPGjQ2tkgWnipsBAWfZm4bbSaNL55UavKe6SRuQ9Wuqqp6hGhT2iPQMJsZqEtTHCvoDIHYUUdPuvWmNbE0JctJ9PZe4vdZJmnDavo1+YFHPhZDXR6rVJKs0+lQ+UepFejFYpRLwVtQ7HMV9xhbuUGu9xtTmxqWbwZcEekKLQVWTbnwQRvBpC/SGgi3MY2plWIYghoOZCfzSoe7nWiH9GAKMXeLJgdtYv+8tM7PVAifk1a0a4sTMmQINVSAPAlL9kTT5Kg3R2JDocUrlDUoARTErpl7EV6xG0hoiU076pTDvxe6q1SnM8eXGfRdWdLspVi/zmk3gpzBA/nZMvCTKARuPZEI/HK7hV4ioOyEv7wfjX/4tcnkT9aWF4PMuFd4aZY3yrCKIZL8c8Jso8bxmodyjT+786IDIP9Bq9QccgKBm4OQeaJUEB/o1e1Yfk9L6TYa2eDG+KT8a02zr2ynIAxNhst6P+Qzi0YtBdUh8A9sO6ZFU/SvgCJ8wZ+ocOtdLeY8HzplrgPFflLRciQLQ9nIiwHv5GN7wFgCqjPh3JIX/n4jcQS9rVf0IUPJiojdrJ24Yjp9W1WnBDqR2ehSIJ6mf6UvNDSG/YVr4lEu/atoGROOYzPh8nvDNvLYcEfEJqIA9ZVHJgGXS4kqCCFpEwUESxy7v/WUjsrYIKNtGbzKc0v5V8o9JmL7PBz4/uAbff3nUfpIFE8yMv89o7sV512kEHRA50SGSlmo4UY0sdG9OTdfAJ64FJTFb2HtfExuKeTJ0WLL+knmLRmdJNAwyKspYKXo1HBLR02Z6/+3C/d5WMd+ig853sYGd7Iqn35ll22DvfXLDrLHJ9Utp+hzttmbPHtMXYjYAyBxOcG32oxYp7oWAXh0j0wgTGWjGGMpSkI31W6KHdvMGfZ49uOcTc8mW0/FFpdCBSyG6UbsNhient9PZ+vvwLVE8ozqDQydXtxu8MwHMOCeqeW63ohD99dDAHfrpnQET6y9GLcgfN8KHji9KrzxuA59Aku2oKcyZxLaI5Rv8nAWmHknu6lCLyfP3RePVvQNSA0RVCieFYanXRX/ynQY8OksHGQ1UVErUmx3Z7cz8rB/+vGNmrz9ATXO+VqT1t9cadEyXfUtsKebpErW6dMlwCUFrsldGiqymkJW8p/O9hX6S5QjhneDb2ozOg7f+Bo+IwmU8FoyQZPHWbFzvw92WwFX5TXrp5roDeo0nJJPvfC3NlOBSnbcnvL9WRw/HZhm+IOAz/QxzhxCTnxm9co2QoeYuTTFyUotzfw1czDG35e8QKjcjcJyDnsfqFtOlHPK+kOg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5bc62685-d67e-4388-6a56-08da0ea47542 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8774.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2022 21:14:33.3402 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iLny6RwOsYl4S3Jz9uJtfV4WU4vvmTMl3lqngSXsAr0OhCxZHXie1dvjwUH+4T4a X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0402MB3881 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220325_141446_731142_F7A1C8EB X-CRM114-Status: GOOD ( 20.99 ) X-Spam-Score: 0.8 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: The code change refactor the bch geometry setting function, which still use the legacy bch setting as default option, while user may choose to use chips required minimum ecc strength by DT flag "fsl,u [...] Content analysis details: (0.8 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a01:111:f400:7e1b:0:0:0:614 listed in] [list.dnswl.org] 0.0 T_SPF_PERMERROR SPF: test of record failed (permerror) -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -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_EF Message has a valid DKIM or DK signature from envelope-from domain 1.0 FORGED_SPF_HELO No description available. X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The code change refactor the bch geometry setting function, which still use the legacy bch setting as default option, while user may choose to use chips required minimum ecc strength by DT flag "fsl,use-minimum-ecc". It also improve the gpmi_check_ecc function to check if the selected ecc strength is strong enough. The driver uses legacy bch geometry settings by default, if the NAND chips oob size is less than 1KB. The legacy_set_geometry() sets the data chunk size(step_size) larger than oob size to make sure BBM locates in data chunk, then set the maximum ecc stength oob can hold. It always use unbalanced ECC layout, which ecc0 will cover both meta and data0 chunk. For all other cases,set the bch geometry by chip required strength and step size, which uses the minimum ecc strength chip required. It can be explicitly enabled by DT flag "fsl,use-minimum-ecc", but need to be en/disabled in both u-boot and kernel at the same time. Signed-off-by: Han Xu Tested-by: Sean Nyekjaer --- Changes in v2 - split the patch to two parts - change the commit log - add test tag --- drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 56 ++++++++++++++++------ 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c index d96899fa90b7..9a37f8cc663e 100644 --- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c @@ -238,9 +238,14 @@ static void gpmi_dump_info(struct gpmi_nand_data *this) geo->block_mark_bit_offset); } -static inline bool gpmi_check_ecc(struct gpmi_nand_data *this) +static bool gpmi_check_ecc(struct gpmi_nand_data *this) { + struct nand_chip *chip = &this->nand; + struct mtd_info *mtd = nand_to_mtd(&this->nand); struct bch_geometry *geo = &this->bch_geometry; + const struct nand_ecc_props *requirements = + nanddev_get_ecc_requirements(&chip->base); + int corr, ds_corr; /* Do the sanity check. */ if (GPMI_IS_MXS(this)) { @@ -248,7 +253,22 @@ static inline bool gpmi_check_ecc(struct gpmi_nand_data *this) if (geo->gf_len == 14) return false; } - return geo->ecc_strength <= this->devdata->bch_max_ecc_strength; + + if (geo->ecc_strength > this->devdata->bch_max_ecc_strength) + return false; + + /* check ecc strength, same as nand_ecc_is_strong_enough() did */ + if (requirements->step_size) { + corr = mtd->writesize * geo->ecc_strength / + geo->ecc_chunk_size; + ds_corr = mtd->writesize * requirements->strength / + requirements->step_size; + if (corr < ds_corr || + geo->ecc_strength < requirements->strength) + return false; + } + + return true; } /* @@ -514,24 +534,32 @@ static int legacy_set_geometry(struct gpmi_nand_data *this) static int common_nfc_set_geometry(struct gpmi_nand_data *this) { struct nand_chip *chip = &this->nand; + struct mtd_info *mtd = nand_to_mtd(&this->nand); const struct nand_ecc_props *requirements = nanddev_get_ecc_requirements(&chip->base); + bool use_minimun_ecc; + int err; - 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)) { - if (!(requirements->strength > 0 && requirements->step_size > 0)) - return -EINVAL; + use_minimun_ecc = of_property_read_bool(this->dev->of_node, + "fsl,use-minimum-ecc"); - return set_geometry_by_ecc_info(this, - requirements->strength, - requirements->step_size); + /* use legacy bch geometry settings by default*/ + if ((!use_minimun_ecc && mtd->oobsize < 1024) || + !(requirements->strength > 0 && requirements->step_size > 0)) { + dev_dbg(this->dev, "use legacy bch geometry\n"); + err = legacy_set_geometry(this); + if (!err) + return 0; } - return 0; + /* otherwise use the minimum ecc nand chip required */ + dev_dbg(this->dev, "use minimum ecc bch geometry\n"); + err = set_geometry_by_ecc_info(this, requirements->strength, + requirements->step_size); + if (err) + dev_err(this->dev, "none of the bch geometry setting works\n"); + + return err; } /* Configures the geometry for BCH. */