From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 418EFC433FE for ; Mon, 10 Oct 2022 13:46:00 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 557EB84E4F; Mon, 10 Oct 2022 15:45:57 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b="Mgg71mAW"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1CD1984D22; Mon, 10 Oct 2022 15:32:27 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70057.outbound.protection.outlook.com [40.107.7.57]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 5B3D184E1E for ; Mon, 10 Oct 2022 15:32:22 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@iopsys.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FRnRhdna8DJKj9Dzu2jduBGo8ZO0pM/MikYqEnReSJ7Uk16H6y31TxnBzv1AcPDn5uf41Yxp5YjxX43ofNr16OaIW0+nvh2uLEazrVutpMAyzGfWH+ai+xlTohSTwjUggP3cqD6Je/rA4QOdJwUCcl0qABYIyiC6Z+7utZuLoHnUA4rzRm+RqZDrS/7g43xK11U4W8w0jdM0QPomvo3u3y2x54haj4KSgtqqhyzH0CBn8Tt9SAT2fXKFZTalfSa+1MbKWG1mkWHnO4nPBtLOxBLS+fKulpE0xq1SGEtj9f1mC3jDLFq3fKCao37tptot2hRQFiOi51tNpDDsVcqSww== 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=lUweYjU8/xvaDdBQJUcQ+l/F3y2pQ+otMlkSDasSdY8=; b=GkbLawD+THR4YMryEQCsa3/UknlUWKS1TJdhWMJIy/KmHT0u4Nt8/+RPUEVKu2gs49j9qeL5bDhbZhcSEwjNpxj9pw5ycvhU4VxjnRI63jEphJzRyMFdGjqU2+FmQcHIFbUnzcwOuoS8l6IklIFOR5AYK0JqdmurwQ1nf0s3QZtpSr1oaGY9NkmOHNMa1ch35UDaJ8UiFgDTvV0HfAliY3uHIpvkfdX3m/Whu3B9rNSj3+9HnTCHf9Cp4B82jsyL/mcf5uC8LZIDGWV+PhffQLzTUeeIrU+e5C/uez+5RZoSHT2lTC0uwg2x0jGbFmL8KxnPscAHVODGKJsOXjK2ag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=iopsys.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lUweYjU8/xvaDdBQJUcQ+l/F3y2pQ+otMlkSDasSdY8=; b=Mgg71mAWIuTFM0iSBtVpYg9fUzukD5V1sisafvd0yf2DijsnjVZh9khsws2VJQufjBM7xul4gY0QEK0llRV5nMwHJGljqXXbP5ghyHNtEFWCZHvWy+Zy/JoZZ8lN94MKB3Asmnt9sxKW3znGZ0XN+zG+GAA+4GeddDf2IX7nywc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from PAXPR08MB6494.eurprd08.prod.outlook.com (2603:10a6:102:154::16) by GV2PR08MB8170.eurprd08.prod.outlook.com (2603:10a6:150:74::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.15; Mon, 10 Oct 2022 13:32:19 +0000 Received: from PAXPR08MB6494.eurprd08.prod.outlook.com ([fe80::3c25:b934:e13d:d6bd]) by PAXPR08MB6494.eurprd08.prod.outlook.com ([fe80::3c25:b934:e13d:d6bd%5]) with mapi id 15.20.5676.040; Mon, 10 Oct 2022 13:32:19 +0000 Date: Mon, 10 Oct 2022 16:32:15 +0300 From: Mikhail Kshevetskiy To: Michael Nazzareno Trimarchi Cc: u-boot@lists.denx.de, Dario Binacchi , Stefan Roese , agnau@iopsys.eu Subject: Re: [PATCH 2/7] mtd/nand: try to erase bad blocks only if scrub flag is provided Message-ID: <20221010163215.74db82ce@laska.lan> In-Reply-To: References: <20221006031501.110290-1-mikhail.kshevetskiy@iopsys.eu> <20221006031501.110290-2-mikhail.kshevetskiy@iopsys.eu> <20221006185210.537a28fb@laska.lan> <20221006191726.49b94916@laska.lan> X-Mailer: Claws Mail 4.1.0 (GTK 3.24.34; x86_64-pc-linux-gnu) Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-ClientProxiedBy: GV3P280CA0095.SWEP280.PROD.OUTLOOK.COM (2603:10a6:150:8::6) To PAXPR08MB6494.eurprd08.prod.outlook.com (2603:10a6:102:154::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR08MB6494:EE_|GV2PR08MB8170:EE_ X-MS-Office365-Filtering-Correlation-Id: 883e8aad-48ac-4f59-4ab2-08daaac3dad2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z4rj9RBFgC1PuHI2ehIuokm98oySw4BNMNnCUmngsy2ncYdvCKzfQZaMECb5hmAhzoOBf0mO+QIR94VGvgS13Y7bXuegNIxfVxr7m+dIvon3x2wNLH258qXT/WPhRRtzN6emCj0dgLkZwLApDVbypY0hUFOy/zPP7fzYMPUeVIkT/fhchEH+/xq6Fr41ZlYel3hMH2wXYTJT8PBdXzOvurixpVDTq2VbMLe6LmWMoG4kkFxGxkG4ZDEuT44xJ5l6qQtDR4xwK+rv1DKqqMvQV5JQhrfHHsPGIkJImXx4o/HugmFQNBYByNhlgpQDiz+UXNAPNbhpBmizRoMlrysO8fwSSVe4eUJWrqzNpxl6uMAxsHPOj6gZ0Q5YVc/0eiAA99nlrMTBmIMVll3muYzKPm20rzbMfhoU+TOE/EEMbf7yirLqwLBtde4vRNGchIxFPnV7bSBzSnhvHuavRqVW/C6uIOXx6c6ZuCd1wQB0UyFZFRv1xLdwLLkzwz8XbpwrHshq+HBtKCJg/Ix5M4ByPeFiqyvKr7ei9/cuaoiqNZRETPIBqKuk3e1YRZJlEtoN/pt5xYGoBgZwVlb4KADX88PxyLdvNBwDVpgPzcyobb4ZP7g2FaagkABCW73ifOd0N/tFVP1ICtVtSCWKGFMrB8SO9MSsNB4p4vasr87XYIsGQHUm6TH5FM0jyvhP2UVz7leHmTC75D7vUvtUQThxGR6LV1G0lSUWKDc2fJ2n6PWG4V8gnxORrOu5Qrxyk82VEv+Dp0qOS4N5mbxZm/fHrbnLhIse5W4Z1nkSzpRs/sU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(396003)(376002)(346002)(136003)(39840400004)(366004)(451199015)(478600001)(53546011)(52116002)(86362001)(8676002)(316002)(45080400002)(66946007)(66556008)(66476007)(4326008)(36756003)(6486002)(186003)(40140700001)(38350700002)(38100700002)(6512007)(107886003)(966005)(83380400001)(9686003)(6666004)(26005)(54906003)(44832011)(6916009)(2906002)(6506007)(1076003)(8936002)(5660300002)(41300700001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qbrC/lLycNNdsGRopOgrURTaJEJGl66ioGioYhzU0sJiM2DkM/lUTTFdB9Sj?= =?us-ascii?Q?l7vl/Mmdo8FS8Q46sYX7KLzQ6X9ID64+1vKRgCxPGHI1WmXmYnXHgV5fO8zp?= =?us-ascii?Q?7bZ5UpBCf15exPmYU56yVSy48osDkjsDqXdc3Cy8fmRTv9X8xki9pHT1Uhhg?= =?us-ascii?Q?wgMrS2XjiEbG7H7P/fae2dcErBwb1oHebVLvqf2QeBHK20IfUgrLD7L/5vtu?= =?us-ascii?Q?+T9ML0Y/XTE65KNF7dI2VbEvLQC5XP9cTbR5C5jOFgDCj0E36fDaZ4VhDHYh?= =?us-ascii?Q?GFwSm4gXk4/iRnJ41Hm8ja5piHdIYS7tStd4+yFmyenqzytUJew9En+9LZVi?= =?us-ascii?Q?eDb4djUjzAxY2zNTk/eP9pSGz3idpORiO63cQxkq/1uIVvWleLQUp9qpqJtG?= =?us-ascii?Q?mobCkS9sRMou+iQYcNzH6D7LH3MOovK2str3dqCk1mSU+lBvb4sxUd6Eh2uS?= =?us-ascii?Q?JwxZddXLq7ZWnhJr4rT83+H6G4Ay60NZ2pDLoA1vJY0Q9/DXA2K0igujVQug?= =?us-ascii?Q?3Fzro1U/W3pJwSoXUAaoBxH43Ic64wEfXO/d5ArGPc2aanHZDNLn/hdfXRLc?= =?us-ascii?Q?vl0/Fmk3AsRKZOuBVV70g6JpEB9ft3C31h0zP8vKb66XOk/j0O7nAudXTsC/?= =?us-ascii?Q?thl4pvK9XbhtCMPMfvI7R5kqQngLuS/Q97UZDcPRweP/9+IaUUdqrQPRE9X5?= =?us-ascii?Q?YSkZ0aS9jKpRXKffDAaD8+JerJDzHFMo+TkM1w1PeRm98VDjljvfaiddXAgk?= =?us-ascii?Q?fcOm+M7xlxs1YPExfgttlS9jaGsz6wJAb+0l7oe714HYEBMMnbqTRqlJUF7M?= =?us-ascii?Q?oEGBVORlam1bBpJcL68SXFX9J75HO7VTRh4AGNYSaz89dLRlKRFiQZI7cRQo?= =?us-ascii?Q?pM/AH+1CMPHKFQ0Qg1VjA4OGsRH/8slJc8kRt779DDFQhtHKVjSb9tqdFQcT?= =?us-ascii?Q?qk07afMVXTve768I5ENPk9cIZKW13PqVD+9LM8B0HiFQKXOI4JYSP+aX/JrQ?= =?us-ascii?Q?bYVeli42biTsTDaSpTTJHLpk3A7G4V5m+PD06PCAgSE65zqWTxJji3bEBeFe?= =?us-ascii?Q?CJwLq6fzAsIqRTx/FAqFnuFUlmly7n38XkIvV3FrUhcoGXFN2pbC777FFuik?= =?us-ascii?Q?+7XF7JlpHWCNcLSZGoQVjOWOiPkCFMwMeUxw7jhqe26QDCkqqiDOoKXjwHLo?= =?us-ascii?Q?flZJ/9anGhwbX6JW2OufmaopmsgpVvipXRM+wixQ82Hiod1yQEx4mYQG64Zf?= =?us-ascii?Q?VRACvpxIdHb9VVN7M64A3zxTERuh+Wh7GvAiTROURSp0BKNP8nRt81g6sn2h?= =?us-ascii?Q?6/+7c99CQWxX+S26dpwf+Cj8pwr7j2euprZkPKcQPxZFY7jiOvkU3wDtRq0i?= =?us-ascii?Q?ApRzJY6cAR9wbbpZilfFaYiwakRPSuS90Bgy4ZA51sywRbTAtG5M9uI/AkZV?= =?us-ascii?Q?7G1Qi8oJYO1CWBgogIro7YaR8kG7Jo8FaGXoBLO180XA4FmyQHBiNeTHV4oq?= =?us-ascii?Q?x+kYx5qZ9QntdWy17V5LocKAOZg79rOEK/lv50jTKA+QzbXPWctsRMPQkFZc?= =?us-ascii?Q?7ypXrqkXdqffxjzIOX+B0NW9Zw9HE9kZvk68mLY88Jo+J0/cEeL6i31dD4tK?= =?us-ascii?Q?cQ=3D=3D?= X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: 883e8aad-48ac-4f59-4ab2-08daaac3dad2 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Oct 2022 13:32:19.5094 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7ff78d65-2de4-40f5-8675-0569e5c7a65d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cabuMSinhuKnlNRpxMFQ9ZoTgEoguILDhXyLLw4MkByYZYOmdUFmnoVEcZXhfX5mkX04RO0vo4dyM3apHf3Y11DmzAwzKICWAay4vTRsKr8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8170 X-Mailman-Approved-At: Mon, 10 Oct 2022 15:45:56 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean On Thu, 6 Oct 2022 20:09:11 +0200 Michael Nazzareno Trimarchi wrote: > [External email] > > > > > > Hi Mikhail > > On Thu, Oct 6, 2022 at 6:17 PM Mikhail Kshevetskiy > wrote: > > > > On Thu, 6 Oct 2022 18:03:17 +0200 > > Michael Nazzareno Trimarchi wrote: > > > > > [External email] > > > > > > > > > > > > > > > > > > On Thu, Oct 6, 2022 at 5:52 PM Mikhail Kshevetskiy > > > wrote: > > > > > > > > On Thu, 6 Oct 2022 08:56:08 +0200 > > > > Michael Nazzareno Trimarchi wrote: > > > > > > > > > [External email] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi > > > > > > > > > > On Thu, Oct 6, 2022 at 5:15 AM wrote: > > > > > > > > > > > > From: Mikhail Kshevetskiy > > > > > > > > > > > > 'mtd erase' command should not erase bad blocks. To force bad block > > > > > > erasing there is 'mtd erase.dontskipbad' command (this command sets > > > > > > 'scrub' flag to true in the erase_info structure). Unfortunately > > > > > > nand layer ignore scrub flag and try to erases bad blocks > > > > > > unconditionally. This is wrong. > > > > > > > > > > > > Add checks to allow bad block erasing only if scrub flag is set. > > > > > > > > > > > > Signed-off-by: Mikhail Kshevetskiy > > > > > > --- > > > > > > drivers/mtd/nand/core.c | 5 ++++- > > > > > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > > > > > > > > > diff --git a/drivers/mtd/nand/core.c b/drivers/mtd/nand/core.c > > > > > > index 99c29670c7..a4fb7602c9 100644 > > > > > > --- a/drivers/mtd/nand/core.c > > > > > > +++ b/drivers/mtd/nand/core.c > > > > > > @@ -174,7 +174,10 @@ int nanddev_mtd_erase(struct mtd_info *mtd, > > > > > > struct erase_info *einfo) nanddev_offs_to_pos(nand, einfo->addr + > > > > > > einfo->len - 1, &last); while (nanddev_pos_cmp(&pos, &last) <= 0) { > > > > > > schedule(); > > > > > > - ret = nanddev_erase(nand, &pos); > > > > > > + if (!einfo->scrub && nanddev_isbad(nand, &pos)) > > > > > > > > > > The nandev_erase already check it here: > > > > > > > > > > if (nanddev_isbad(nand, pos) || nanddev_isreserved(nand, pos)) { > > > > > > > > > > > > > no it does not work. see nanddev_erase() code > > > > > > > > > > Let me re-formulate it. What execution path are you taking into account? > > > > > > The nand are erased using the cmd/nand interface and the erase command > > > there calls nand_erase_opts that take in account it. > > > > spi-nand flash > > > > cmd/mtd.c -> do_mtd_erase() -> .... -> nanddev_mtd_erase() -> > > nanddev_erase() > > > > Ok now it's clear. I'm thinking and i have create a patch if we can > use somenthing like this > > Not tested > > > @@ -393,7 +394,7 @@ out_put_mtd: > static int do_mtd_erase(struct cmd_tbl *cmdtp, int flag, int argc, > char *const argv[]) > { > - struct erase_info erase_op = {}; > + nand_erase_options_t opts = {}; > struct mtd_info *mtd; > u64 off, len; > bool scrub; > @@ -431,26 +432,11 @@ static int do_mtd_erase(struct cmd_tbl *cmdtp, > int flag, int argc, > printf("Erasing 0x%08llx ... 0x%08llx (%d eraseblock(s))\n", > off, off + len - 1, mtd_div_by_eb(len, mtd)); > > - erase_op.mtd = mtd; > - erase_op.addr = off; > - erase_op.len = mtd->erasesize; > - erase_op.scrub = scrub; > - > - while (len) { > - ret = mtd_erase(mtd, &erase_op); > - > - if (ret) { > - /* Abort if its not a bad block error */ > - if (ret != -EIO) > - break; > - printf("Skipping bad block at 0x%08llx\n", > - erase_op.addr); > - } > - > - len -= mtd->erasesize; > - erase_op.addr += mtd->erasesize; > - } > + opts.offset = off; > + opts.length = len; > + opts.scrub = scrub; > > + ret = nand_erase_opts(mtd, &opts); > if (ret && ret != -EIO) > ret = CMD_RET_FAILURE; > else > > Michael no, we can't do it. cmd/mtd.c can be used without CONFIG_MTD_RAW_NAND and I think your fix will break mtd command for non-nand flashes. spi-nand flashes directly registers itself with mtd layer (nand_register() function is not used), so it much more simple use cmd/mtd than cmd/nand. > > > > > > > > > > Michael > > > > > > > > > > > > The nand is erased using the > > > > if block is bad or reserverved, than warning is printed, than block is > > > > erased. > > > > > > > > > > > > > > + ret = -EIO; > > > > > > + else > > > > > > + ret = nanddev_erase(nand, &pos); > > > > > > > > > > erase opt should already take in account scrub. > > > > > > > > > > Please extend the problem > > > > > > > > > > Michael > > > > > > if (ret) { > > > > > > einfo->fail_addr = nanddev_pos_to_offs(nand, > > > > > > &pos); > > > > > > > > > > > > -- > > > > > > 2.35.1 > > > > > > > > > > > > > > > > > > > > > -- > > > > > Michael Nazzareno Trimarchi > > > > > Co-Founder & Chief Executive Officer > > > > > M. +39 347 913 2170 > > > > > michael@amarulasolutions.com > > > > > __________________________________ > > > > > > > > > > Amarula Solutions BV > > > > > Joop Geesinkweg 125, 1114 AB, Amsterdam, NL > > > > > T. +31 (0)85 111 9172 > > > > > info@amarulasolutions.com > > > > > https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.amarulasolutions.com%2F&data=05%7C01%7Cmikhail.kshevetskiy%40iopsys.eu%7C315a2da790414f5cb22108daa7c5e5e2%7C7ff78d652de440f586750569e5c7a65d%7C0%7C0%7C638006765651063852%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ouhzZ4pEofl7llK8OQHpatkrdksZozIgzY5IY9P%2BIL8%3D&reserved=0 > > > > > > > > > > > > -- > > > Michael Nazzareno Trimarchi > > > Co-Founder & Chief Executive Officer > > > M. +39 347 913 2170 > > > michael@amarulasolutions.com > > > __________________________________ > > > > > > Amarula Solutions BV > > > Joop Geesinkweg 125, 1114 AB, Amsterdam, NL > > > T. +31 (0)85 111 9172 > > > info@amarulasolutions.com > > > https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.amarulasolutions.com%2F&data=05%7C01%7Cmikhail.kshevetskiy%40iopsys.eu%7C315a2da790414f5cb22108daa7c5e5e2%7C7ff78d652de440f586750569e5c7a65d%7C0%7C0%7C638006765651063852%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ouhzZ4pEofl7llK8OQHpatkrdksZozIgzY5IY9P%2BIL8%3D&reserved=0 > > > > -- > Michael Nazzareno Trimarchi > Co-Founder & Chief Executive Officer > M. +39 347 913 2170 > michael@amarulasolutions.com > __________________________________ > > Amarula Solutions BV > Joop Geesinkweg 125, 1114 AB, Amsterdam, NL > T. +31 (0)85 111 9172 > info@amarulasolutions.com > https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.amarulasolutions.com%2F&data=05%7C01%7Cmikhail.kshevetskiy%40iopsys.eu%7C315a2da790414f5cb22108daa7c5e5e2%7C7ff78d652de440f586750569e5c7a65d%7C0%7C0%7C638006765651063852%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ouhzZ4pEofl7llK8OQHpatkrdksZozIgzY5IY9P%2BIL8%3D&reserved=0 Maybe it's better accept my change and fix nand_erase_opts() instead ? Bad block table is autocleaned in nanddev_erase() function. diff --git a/drivers/mtd/nand/raw/nand_util.c b/drivers/mtd/nand/raw/nand_util.c index b2345dca7f..b35571dfd5 100644 --- a/drivers/mtd/nand/raw/nand_util.c +++ b/drivers/mtd/nand/raw/nand_util.c @@ -75,6 +75,7 @@ int nand_erase_opts(struct mtd_info *mtd, erase.mtd = mtd; erase.len = mtd->erasesize; erase.addr = opts->offset; + erase.scrub = opts->scrub; erase_length = lldiv(opts->length + mtd->erasesize - 1, mtd->erasesize); @@ -82,23 +83,6 @@ int nand_erase_opts(struct mtd_info *mtd, cleanmarker.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER); cleanmarker.totlen = cpu_to_je32(8); - /* scrub option allows to erase badblock. To prevent internal - * check from erase() method, set block check method to dummy - * and disable bad block table while erasing. - */ - if (opts->scrub) { - erase.scrub = opts->scrub; - /* - * We don't need the bad block table anymore... - * after scrub, there are no bad blocks left! - */ - if (chip->bbt) { - kfree(chip->bbt); - } - chip->bbt = NULL; - chip->options &= ~NAND_BBT_SCANNED; - } - for (erased_length = 0; erased_length < erase_length; erase.addr += mtd->erasesize) { @@ -109,34 +93,24 @@ int nand_erase_opts(struct mtd_info *mtd, puts("Size of erase exceeds limit\n"); return -EFBIG; } - if (!opts->scrub) { - int ret = mtd_block_isbad(mtd, erase.addr); - if (ret > 0) { + + erased_length++; + + result = mtd_erase(mtd, &erase); + if (result != 0) { + if (!opts->scrub && result == -EIO) { if (!opts->quiet) printf("\rSkipping bad block at " "0x%08llx " " \n", erase.addr); - if (!opts->spread) - erased_length++; - - continue; - - } else if (ret < 0) { - printf("\n%s: MTD get bad block failed: %d\n", - mtd_device, - ret); - return -1; + if (opts->spread) + erased_length--; + } else { + printf("\n%s: MTD Erase failure: %d\n", + mtd_device, result); } - } - - erased_length++; - - result = mtd_erase(mtd, &erase); - if (result != 0) { - printf("\n%s: MTD Erase failure: %d\n", - mtd_device, result); continue; } --- Mikhail Kshevetskiy