Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp5334590pxb; Mon, 15 Feb 2021 17:01:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJyI8uCZsn62aNfl02C+z5rOGsi8mfmFaW6jzpKcS7Oo+ONf9fYBBCXtsve/ydx82BoEbhq3 X-Received: by 2002:a17:907:7781:: with SMTP id ky1mr17764972ejc.255.1613437294718; Mon, 15 Feb 2021 17:01:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613437294; cv=none; d=google.com; s=arc-20160816; b=uGifFNX9J0uNx0mUuEEfm6x0iXlqAhqAmSkVVON4e0GJRP1HzcflwR5qhVttxaVe9g izAlhkTPjj2i5n7QHfoMGjfQ42y/tGV8pDrEaF21rGQ+QJj5NGekCQe3g1GGAVv5tYvf Jzx36vw00ve3B/JB1svl83xYwyHrd6L29VE6er8OvRhRFnAkFJXH7Gxr5iYOWvpNYA06 4V4vGXUNUjaY7YGMX/TWBGLhJD6oTQbAvXnKtNzU10ms3ElrPkSMjk8KNynb22BOATU0 T3sF6m8tcTCwSb4idL1L3ZK2hlvy0RqIftykn0Z94YUxgXxmMsBFYfhyI1WLLMClispa pZUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=s5Q6tE3A4v8Jh5craODjAiTWBSRNLm2Cj09IGb79/w0=; b=jptgZuGzTf7fevjKWVP1CbUZ8agcmL01N6DMDZcwyqSUMZdEBFi3IbNNJl/kvkBSms N/2JvorKFQmmT3TNYVWEl9x+JSbl+qUU0+wSrC4s0cA2z0QbEQCCDwKx8FuEP8fPK28E QL+E80/ShOlkqT9McdkYIv2J9oCIgRXdHpWp7lZuH3yccb6xOIgyAFoShWklDU0zSi3w u/mzOKPrxTmEOazkr4iLAPzLsXSFa9Hv3gqTythhIncG/N76sfNbShLVwHFUf2oFYXHg cJ59pLRsl7wz7PAmZLirr6aDNg9tEb6/azYQpbfVFb3vSPgXRkHeQPFcCWPi6sntfrrc 2WTw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kioxia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bk20si13313299ejb.203.2021.02.15.17.01.02; Mon, 15 Feb 2021 17:01:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kioxia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229697AbhBPBAf (ORCPT + 99 others); Mon, 15 Feb 2021 20:00:35 -0500 Received: from mo-csw-fb1115.securemx.jp ([210.130.202.174]:40688 "EHLO mo-csw-fb.securemx.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229497AbhBPBAf (ORCPT ); Mon, 15 Feb 2021 20:00:35 -0500 X-Greylist: delayed 1207 seconds by postgrey-1.27 at vger.kernel.org; Mon, 15 Feb 2021 20:00:33 EST Received: by mo-csw-fb.securemx.jp (mx-mo-csw-fb1115) id 11G0egeW026957; Tue, 16 Feb 2021 09:40:42 +0900 Received: by mo-csw.securemx.jp (mx-mo-csw1114) id 11G0c839023879; Tue, 16 Feb 2021 09:38:08 +0900 X-Iguazu-Qid: 2wGqn5DuWvVM6sYQCW X-Iguazu-QSIG: v=2; s=0; t=1613435888; q=2wGqn5DuWvVM6sYQCW; m=jnHDndSUrFfAQglWXjmb49JJo8sxPyZ3Gev6yI5lHw8= Received: from imx2.toshiba.co.jp (imx2.toshiba.co.jp [106.186.93.51]) by relay.securemx.jp (mx-mr1110) id 11G0c5PV015544; Tue, 16 Feb 2021 09:38:06 +0900 Received: from enc01.toshiba.co.jp ([106.186.93.100]) by imx2.toshiba.co.jp with ESMTP id 11G0c5oW005610; Tue, 16 Feb 2021 09:38:05 +0900 (JST) Received: from hop001.toshiba.co.jp ([133.199.164.63]) by enc01.toshiba.co.jp with ESMTP id 11G0c59I026414; Tue, 16 Feb 2021 09:38:05 +0900 From: Yoshio Furuyama To: miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v1] mtd: nand: Fix BBT update issue Date: Tue, 16 Feb 2021 09:37:55 +0900 X-TSB-HOP: ON Message-Id: X-Mailer: git-send-email 2.7.4 In-Reply-To: <1613435875-6846-1-git-send-email-ytc-mb-yfuruyama7@kioxia.com> References: <1613435875-6846-1-git-send-email-ytc-mb-yfuruyama7@kioxia.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fixed issue of manages BBT (Bad Block Table). It didn't mark correctly when a specific block was bad block. This issue occurs when the bad block mark (3-bit chunk) is crosses over 32 bit (e.g. Block10, Block21...) unit. Signed-off-by: Yoshio Furuyama --- drivers/mtd/nand/bbt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/bbt.c b/drivers/mtd/nand/bbt.c index 044adf913854..979c47e61381 100644 --- a/drivers/mtd/nand/bbt.c +++ b/drivers/mtd/nand/bbt.c @@ -112,18 +112,20 @@ int nanddev_bbt_set_block_status(struct nand_device *nand, unsigned int entry, ((entry * bits_per_block) / BITS_PER_LONG); unsigned int offs = (entry * bits_per_block) % BITS_PER_LONG; unsigned long val = status & GENMASK(bits_per_block - 1, 0); + unsigned long shift = ((bits_per_block + offs <= BITS_PER_LONG) ? + (offs + bits_per_block - 1) : (BITS_PER_LONG - 1)); if (entry >= nanddev_neraseblocks(nand)) return -ERANGE; - pos[0] &= ~GENMASK(offs + bits_per_block - 1, offs); + pos[0] &= ~GENMASK(shift, offs); pos[0] |= val << offs; if (bits_per_block + offs > BITS_PER_LONG) { unsigned int rbits = bits_per_block + offs - BITS_PER_LONG; pos[1] &= ~GENMASK(rbits - 1, 0); - pos[1] |= val >> rbits; + pos[1] |= (val >> (BITS_PER_LONG - offs)); } return 0; -- 2.25.1