From patchwork Tue Aug 18 03:24:49 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Xu X-Patchwork-Id: 7028101 Return-Path: X-Original-To: patchwork-dmaengine@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E3A95C05AC for ; Tue, 18 Aug 2015 03:34:14 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DF2FC206C5 for ; Tue, 18 Aug 2015 03:34:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E7923206A5 for ; Tue, 18 Aug 2015 03:34:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752215AbbHRDdY (ORCPT ); Mon, 17 Aug 2015 23:33:24 -0400 Received: from mail-bn1bon0147.outbound.protection.outlook.com ([157.56.111.147]:16288 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752204AbbHRDdV (ORCPT ); Mon, 17 Aug 2015 23:33:21 -0400 Received: from BY2PR03CA007.namprd03.prod.outlook.com (10.255.93.24) by BY2PR03MB553.namprd03.prod.outlook.com (10.141.141.155) with Microsoft SMTP Server (TLS) id 15.1.231.21; Tue, 18 Aug 2015 03:33:18 +0000 Received: from BN1BFFO11FD046.protection.gbl (10.255.93.4) by BY2PR03CA007.outlook.office365.com (10.255.93.24) with Microsoft SMTP Server (TLS) id 15.1.231.21 via Frontend Transport; Tue, 18 Aug 2015 03:33:18 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; vger.kernel.org; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD046.mail.protection.outlook.com (10.58.145.1) with Microsoft SMTP Server (TLS) id 15.1.243.9 via Frontend Transport; Tue, 18 Aug 2015 03:33:17 +0000 Received: from chopperman.am.freescale.net (chopperman.am.freescale.net [10.81.16.64]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t7I3XHM5025151; Mon, 17 Aug 2015 20:33:17 -0700 From: Han Xu To: CC: , , , , , , , , , , Subject: [PATCH v2 3/6] mtd: nand: gpmi: may use minimum required ecc for 744 oobsize NAND Date: Mon, 17 Aug 2015 22:24:49 -0500 Message-ID: <1439868289-24843-1-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD046; 1:LxF7GxAKGn9sb1m24YBncVHL90Gr6vIZBt691VssUwv8QmCJ+YpeQ5S+1vYpuiiMww+4lCa7k0PJjTN7qTJpZDFZrKpP97P6o4q2MJKhZm6365qfIfskddprZCAhX/QqMJdujvCVnn10S6K7moRGqevzhlbpwSDgoYIwpfVWxNbrvkLO6SFVt+lVbZ0x2U+Ps/duAHrTC0EMkJycENB+Sg6hFOgfomce8uU+znc8Jqu6umkUrEjEAMm8sFMosW39/Ing2CZ2VxRS6qeNMd539v8YuW9ai2k3CtzK8IBPWJxUR+fLeSte2M08rbpzHFQ9nl5a2TcXV1vpzD5b4CwxkGk2+IPXZRrF08ffPdf+1vT8dNRDmMPP4P/urWMcS2klu3XDL3mIQ3wnH35E57Ts2Q== X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(3050300001)(339900001)(199003)(189002)(77096005)(104016003)(68736005)(106466001)(47776003)(229853001)(575784001)(50986999)(33646002)(19580405001)(6806004)(19580395003)(92566002)(48376002)(105606002)(2351001)(5003940100001)(5001960100002)(46102003)(36756003)(77156002)(64706001)(5001920100001)(5001830100001)(189998001)(5001860100001)(62966003)(110136002)(87936001)(85426001)(97736004)(4001540100001)(81156007)(50466002)(50226001); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR03MB553; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB553; 2:abMMvqGnJZZjeywE4SGbW3LL8LHu7a2vGLG21k1RcxA6XFhJ1cLD5wnJ3hCjo3HDeVQ4J46nuBidiU5J8yk/hFrzZ/cVZ7pHQYSN4PALK4Gh8b2Aksgai6NVU0VTjfpPdB8XkbXM5EiCzuaRnM1Zqseg9j1Z6VJyRZLFHXIQ1EM=; 3:bi0pLz2HVZut+DX41HUuGjaDZMqZjoJ48TAsGIjOLi7rZpVVOTXWE2eNbTVL9X3RKLM4gC+h36QCEzPPVbxEpAmCyRna6TlUsIzfawmJtIPiurFDabpNnHJapGxGgYDajlw6N2xopZGIreMR/R+cBF39yPVB6KG37NK/ooLeTPJ+M3B+SDOU7ND0e1xUY9RPF2g9MKhHSA9omW0Wdpf0PwhZIPGr7uZ094h5EnZHtR4=; 25:FlYSunv0WRaQrU1uSLYobIZLEIQZuEGMsa7Yerb7XYVHadsFr2HYgBzYOAUZhvT7X55G/gac2D6Q1gBlhNAqLCuy2OxHypmhoTCh/h9+zmWGzf/ZDVsRxpo5zqM1BViL0L9wHkzqLOJXSh5HeAwkdbxONFRqaGGh7Cp07FCMMIl7BmUATHKhaXz7vfEuSrGIAxoYYbiMJgBPc5YcMRdZgeO5ZSKVgYZXMh9uZs3RJedixgf0V9K/Ygg8yx6krdco X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR03MB553; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB553; 20:nxzlr7794aFhgc83J7yamGBJTExvM3y7U8yU1D+orq/EBPtlLEQHxqBaPcdXPx+eemPH3IQFCpQ4+Dxd0jkCUMD8ienFfbDeYPUqL6sO/U84uIRcm/Y2+AAJ4eI0ppZM1xuEdlMWOdjgg5EqMKkBzc7BveRlO9mQXOLX/zkL5PiRxGP2xXMBExcKXIAYmx0DP1Z2c8R8vh5rCTNv4AiBamRfpAoIZqbO8GleTcTk5I3saqGZXrF1Lr7ONu1iV/U4tU8jbqzfYRQQzGHb1PrEZv1gnpSaBsqI+6nPQ+DCylMQhOI/ygQczmFHJ9L3/F77jQ6fGKUmyUFzL7Mhv5PEHjcolBs4eH0MpPUPpVzkKUM=; 4:hz64m2rWDdO1brKTqRKVdAXkdE002ZEaNLkYBygULBVE1T/+qcArexNrKZK6vauGNv0R0esQ77dn1S6M81AdFRMpdkS6a9iB6JiwvcCVj2bVjs4T/ehot14eCXQ3H12IErEBWxDg5/wWFMmVjfkddQ525yRCcL3mU5x4WklGpn1VUfg3l5FPaCGt+iODvzutBnAMjxk5t1w/5wXLiNdspFPpDR5CIRe9iQwkCfHVGa1qkwqDLzip48g6BSNMgYeZ9yYu+ZjLrjgk7jTQEHQHrW0FWqnhz5YuzCxuIvzlobCM7Ms4QRw8YxiqA1+aW4+g X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(8121501046)(5005006)(3002001); SRVR:BY2PR03MB553; BCL:0; PCL:0; RULEID:; SRVR:BY2PR03MB553; X-Forefront-PRVS: 067270ECAF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR03MB553; 23:fz6viMl9ITtY+zJAo5E75uUlFOx4SUx10lJ9Ae7314?= =?us-ascii?Q?DYWmLMC+vC5Mf+XyNElHxN5zp40XUmRQfokzWWeZS6fW8Hf/hBvRQrhrFSSk?= =?us-ascii?Q?Vhl3VXGQSesnllJEZ+ATY9r5T+jcg5Al3GFP9yqFMV1Q5uGydAsWdDk1qXYE?= =?us-ascii?Q?Xtow7Y8UAKKDoQL/KnIW/FXaiMdnXQANv3OPRWbQmIT3Sr1uU06IeORTsuaD?= =?us-ascii?Q?8t5QnBEptenj2Xy0jrpHQyJxmRSocFabUnYa+Ka4aphX6biN+PgWIzSjPRwy?= =?us-ascii?Q?QWt61m5/VtOfz0ezhCmcF6MXgtNd+OCUHXLQin7WRzL0hTXVYDdt2sFnVTUj?= =?us-ascii?Q?iLA8fnzslywHjywwC/EZA6+A/tyoJM7ejLNRq8TDIDFVzQwxU6n8lakcFbbp?= =?us-ascii?Q?QcY2ob0DMF6MPYbKp1ydYxTQpkW74oIGnubYeGSqosz0kStrBgV3klrHyv0+?= =?us-ascii?Q?KQXzTZfMwGCSyPk5jtI23xMR691VrV3WXNVOjrRkT0kOo6kGe43JBm0BKuK5?= =?us-ascii?Q?n0+WFPOuPou+BNm7SqqpeNLdZWDnDeES1b6URZ2gqtZmlw1GKA42OxJyg2S+?= =?us-ascii?Q?fAXu29o95OqnuGF9ju/L0x+NWQRnwst0aoqT2pZFXTubfooTu6vukAwECnGy?= =?us-ascii?Q?Tp9oSNB3w0ozC/0/uWSuYDnIMzx9cL/T914sOXa4hyGSJ2D+RuMVQTe/Vvf9?= =?us-ascii?Q?BXBfiaI2dGVN16wMnmCA9xVQ4eZvf9lgsJVQZULcCT8r3N+HfaPOaY+L0GoT?= =?us-ascii?Q?KQXC9y6AfuDiZDE6K3ZDUJrmJdsrtbJlz/imtftJIV7tmVz6fjohFE3YUTgG?= =?us-ascii?Q?nwIT742rwATnEHO2JHf40QDjBgaCYWvu7YHk0p82F+mheTFDJ3oc8SoJwNN4?= =?us-ascii?Q?liaWc+SHbB3ewjBSZXLfNPake4FI+1a7p4ZP+KeqY6ehh5xh7WKMCFv+PWtv?= =?us-ascii?Q?WfQngxah9t2MszxtGE+eTK9dD7nVom51ez4JnKdrnEMPEsPO1f6lg5uBBNbF?= =?us-ascii?Q?mbQnvUq6lrbv1cRM/jttnsXe0e0fP2I5SKlxLZIPDbiIjRQcKFFBpJ3JTSYL?= =?us-ascii?Q?evoKqorxDbxp3eKtRPhPtzWVID1gObmxMxi6Zs4YMlxzdPZORQuwGmGZ1voU?= =?us-ascii?Q?kn+GaM8+Q=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB553; 5:w4g0UWC2cVW01ZJE7GRyOALcwyDnYecTI9n10EAehaAouBVgofH1zqZepE2n66EqtHDOKKmUmQhaFkasP+tzTxZ8tAfB2A6EA2RHxC++wA3LZxf8X/D64w4IxuZmAnUGKh4GQhS4PjqhaoHLoIJaRA==; 24:M8EUzCZKN4/fIxa0Oj4frnyqy1MDhr0JJFuKiRzz6DLPFnTFgrf5eTShuYb+V8RWA3t1lOh7ewqSn6FNEi055sZdnPeqx2Wkd5wFIRgXZy0=; 20:uS5MkyZayDImqOne3YIb6UO8Nb66pX6/fLEaK2yC5CZWjoY6AFHQC8lxKhs9stgTYZfDF6OfIf4o31zqUiOUew== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2015 03:33:17.9247 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR03MB553 Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP By default NAND driver will choose the highest ecc strength that oob could contain, in this case, for some 8K+744 NAND flash, the ecc strength will be up to 52bit, which beyonds the i.MX6QDL BCH capability (40bit). This patch allows the NAND driver try to use minimum required ecc strength if it failed to use the highest ecc, even without explicitly claiming "fsl,use-minimum-ecc" in dts. Signed-off-by: Han Xu --- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c index dfd0ba1..01d24dd 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c @@ -136,7 +136,7 @@ static inline bool gpmi_check_ecc(struct gpmi_nand_data *this) * * We may have available oob space in this case. */ -static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this) +static int set_geometry_by_ecc_info(struct gpmi_nand_data *this) { struct bch_geometry *geo = &this->bch_geometry; struct mtd_info *mtd = &this->mtd; @@ -145,7 +145,7 @@ static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this) unsigned int block_mark_bit_offset; if (!(chip->ecc_strength_ds > 0 && chip->ecc_step_ds > 0)) - return false; + return -EINVAL; switch (chip->ecc_step_ds) { case SZ_512: @@ -158,19 +158,19 @@ static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this) dev_err(this->dev, "unsupported nand chip. ecc bits : %d, ecc size : %d\n", chip->ecc_strength_ds, chip->ecc_step_ds); - return false; + return -EINVAL; } geo->ecc_chunk_size = chip->ecc_step_ds; geo->ecc_strength = round_up(chip->ecc_strength_ds, 2); if (!gpmi_check_ecc(this)) - return false; + return -EINVAL; /* Keep the C >= O */ 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); - return false; + return -EINVAL; } /* The default value, see comment in the legacy_set_geometry(). */ @@ -242,7 +242,7 @@ static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this) + ALIGN(geo->ecc_chunk_count, 4); if (!this->swap_block_mark) - return true; + return 0; /* For bit swap. */ block_mark_bit_offset = mtd->writesize * 8 - @@ -251,7 +251,7 @@ static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this) geo->block_mark_byte_offset = block_mark_bit_offset / 8; geo->block_mark_bit_offset = block_mark_bit_offset % 8; - return true; + return 0; } static int legacy_set_geometry(struct gpmi_nand_data *this) @@ -366,10 +366,12 @@ static int legacy_set_geometry(struct gpmi_nand_data *this) int common_nfc_set_geometry(struct gpmi_nand_data *this) { - if (of_property_read_bool(this->dev->of_node, "fsl,use-minimum-ecc") - && set_geometry_by_ecc_info(this)) - return 0; - return legacy_set_geometry(this); + + if ((of_property_read_bool(this->dev->of_node, "fsl,use-minimum-ecc")) + || legacy_set_geometry(this)) + return set_geometry_by_ecc_info(this); + + return 0; } struct dma_chan *get_dma_chan(struct gpmi_nand_data *this)