Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3477222ybz; Mon, 4 May 2020 03:52:33 -0700 (PDT) X-Google-Smtp-Source: APiQypKj/ZICeHQrTcbgG+Hp0pYQJFjkigXnRw+FdEALU+Ci63lGKwV4LeSTcGFVl/ppH/9n6Xsc X-Received: by 2002:a17:906:e90:: with SMTP id p16mr14469765ejf.14.1588589553264; Mon, 04 May 2020 03:52:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588589553; cv=none; d=google.com; s=arc-20160816; b=nCc+2ZTz1kuCzZR0P6cadixabHzpKSj2DJKAaIux1/VoUOEOdO57thzQO87fC3b3Xf 04vpUnqv2frgLIGFaUyzdqMcdnM2nkyATc4+LgKcJsC+xet99xm83trA31zj2SucZpjU K90qIxuo3t4gvMp2wBh7R5kxMe+IwyiKw6IH5Dl7Lhtih4x7GWuUmlhlIWYN4kMjWyhe NDygc4zLXamjGMaMlVpa8uZBZ7TAdtzp7BSXmgxdODzx01YdRNrsEL+4F/MJsivLsbhw HBmOJpAZoxn5m1kaxhM9jo4V11882kcHDOxVSzlZGFLCc27cMV8NJyHuVDHSiJCIcCTl xtFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=bFEGv6CCmbfyeLz8IeHLDtS38ZT5IUN5TPag8zEspXg=; b=Pw5dSX4Yw+TQ9s8KpAAyb3HuQMTGKrffmR51uviskNcIjArIO7RMmrN3S1SGy8njRk jqoJzfi3XaOG0kwmT9f6kAeFE0kptUpYrL0M6ty46Bw3QFQD2Yj+WDyKKAKLXw9gbqsB D99CFZstwjZisdWn8mpPOO/l2nrq7BpZfHRCR+5TwJo5G0frJidCuFjerwfcUA9UKerm l6O0kY63htXlBveL7r9WkvNCmHiHtPcSnkIbkxmdBYsF3LrMar3HaWrhqFmLFqu2APXk mJU3BjobR548EhY8wWRSqRN3oDYLd7Ki2/Zs24NCOG5yrMPyXOR/aTH94mghD8wBlyVS 0YUQ== 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=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a11si6539281edv.573.2020.05.04.03.52.10; Mon, 04 May 2020 03:52:33 -0700 (PDT) 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=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728430AbgEDKcm convert rfc822-to-8bit (ORCPT + 99 others); Mon, 4 May 2020 06:32:42 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:55772 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725928AbgEDKcm (ORCPT ); Mon, 4 May 2020 06:32:42 -0400 Received: from localhost (unknown [IPv6:2a01:e0a:2c:6930:5cf4:84a1:2763:fe0d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 10EFE2A0821; Mon, 4 May 2020 11:32:40 +0100 (BST) Date: Mon, 4 May 2020 12:32:37 +0200 From: Boris Brezillon To: =?UTF-8?B?w4FsdmFybyBGZXJuw6FuZGV6?= Rojas Cc: miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, s.hauer@pengutronix.de, masonccyang@mxic.com.tw, christophe.kerello@st.com, stefan@agner.ch, piotrs@cadence.com, devik@eaxlabs.cz, tglx@linutronix.de, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] nand: raw: use write_oob_raw for MTD_OPS_AUTO_OOB mode Message-ID: <20200504123237.5c128668@collabora.com> In-Reply-To: <20200504094253.2741109-1-noltari@gmail.com> References: <20200504094253.2741109-1-noltari@gmail.com> Organization: Collabora X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 4 May 2020 11:42:53 +0200 Álvaro Fernández Rojas wrote: > Some NAND controllers change the ECC bytes when OOB is written with ECC > enabled. > This is a problem in brcmnand, since adding JFFS2 cleanmarkers after the page > has been erased will change the ECC bytes to 0 and the controller will think > the block is bad. > It can be fixed by using write_oob_raw, which ensures ECC is disabled. > > Signed-off-by: Álvaro Fernández Rojas > --- > drivers/mtd/nand/raw/nand_base.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c > index c24e5e2ba130..755d25200520 100644 > --- a/drivers/mtd/nand/raw/nand_base.c > +++ b/drivers/mtd/nand/raw/nand_base.c > @@ -488,7 +488,7 @@ static int nand_do_write_oob(struct nand_chip *chip, loff_t to, > > nand_fill_oob(chip, ops->oobbuf, ops->ooblen, ops); > > - if (ops->mode == MTD_OPS_RAW) > + if (ops->mode == MTD_OPS_AUTO_OOB || ops->mode == MTD_OPS_RAW) > status = chip->ecc.write_oob_raw(chip, page & chip->pagemask); The doc says: @MTD_OPS_PLACE_OOB: OOB data are placed at the given offset (default) @MTD_OPS_AUTO_OOB: OOB data are automatically placed at the free areas which are defined by the internal ecclayout @MTD_OPS_RAW: data are transferred as-is, with no error correction; this mode implies %MTD_OPS_PLACE_OOB To me, that means MTD_OPS_PLACE_OOB and MTD_OPS_AUTO_OOB do not imply MTD_OPS_RAW. Anyway those modes are just too vague. We really should separate the ECC-disabled/ECC-enabled concept (AKA raw vs non-raw mode) from the OOB placement scheme. IIRC, Miquel had a patchset doing that. We also should have the concept of protected OOB-region vs unprotected-OOB-region if we want JFFS2 to work with controllers that protect part of the OOB region. Once we have that we can patch JFFS2 to write things with "ECC-disabled"+"auto-OOB-placement-on-unprotected area". > else > status = chip->ecc.write_oob(chip, page & chip->pagemask);