Received: by 2002:a89:288:0:b0:1f7:eeee:6653 with SMTP id j8csp344348lqh; Tue, 7 May 2024 00:13:05 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWCbtOBfYAqksJrqrHSqonilDfePRYEaWRTQdeJxdLAZA/LfYoeh5TCtujJTwEX+9enXXoqsUsKsSzo42nRZkNHLjve87lpp+zqTr0YAA== X-Google-Smtp-Source: AGHT+IHfnibFZhwUZ0OI1CHneF0tqcquzdp0nFeJv/lYHApfPARXxLrKHmzz+Ji0uSUAWg//4rZ1 X-Received: by 2002:a05:6870:b528:b0:23c:7b6d:38ca with SMTP id v40-20020a056870b52800b0023c7b6d38camr14624173oap.35.1715065985610; Tue, 07 May 2024 00:13:05 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1715065985; cv=pass; d=google.com; s=arc-20160816; b=xO1AkV56hOv/2ypNzz3IONLuvTGf71QKlW6O+MI3/yn0uXGR4zgbRACDxpgMT44JsA bO0EqscE2n7gdQKfgzoyi1oRpQYUfE9Wt1VuSylcWqiiNLjH2ovIy/G0i+tkGwriNsWD mgtePN/nIElbOpvQQK/UtCWMpI83+V+m5dhNW/eUvps5htc5K5GgL6VPPzqjtUEkuxZa rKvpLUoLt+joLwu9qdzo4PS7wv3CXhhMu5U3jCRbmmimdw/nnoX6Q0jYE/y6JvkmCv83 tfwfSf41uu7mH6RNGOZkH7KkUukBfwsI6BTBPee9HyPpl66fd+J0Zc9E8avTadXWlHxf msQA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:message-id:subject:cc :to:from:date; bh=bAObUQ4BY4V8Ss6UPCVTCD9qXZA6UQOaDB7BE/Ym7wI=; fh=J2WUQeL4Z9/Law5EDxuI4ZJklK367A/QTZaeg2R0E6Y=; b=crujAOvE8H0ClHwXwOHwPCUYvHyGIwjcUC4gmoo0wFdtWEi2xSU0KObdHB/+pJABcm UVBVBTKSBlZdu+rH+/2CdRBqER0zB+k3hRlMGEWTbdECd8yQLrnULO6SzdJFrK4n3yKh 4EFdO2OEGR3wJwIxdC8jXXvGTTlwW1v3bH878X4BItMomvlb0uwHG6JjruzxRpUaA/n1 b4o2A+5FDrwaE8EElD02gF9m7/X3FjYHRQERRV6Gf8LCVQMPzZQpMgv7QIlahH2qWC+k 2UPsWZSHL3n95fgjF7xUSkxb95G7nPvqcHBvLswyKUfUOmOSslE+MGWjKyf/tgeg31YQ lk+w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-170795-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-170795-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id ll23-20020a056a00729700b006edb0c9615csi9741215pfb.93.2024.05.07.00.13.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 May 2024 00:13:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-170795-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=pengutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-170795-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-170795-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 19C14285ACE for ; Tue, 7 May 2024 07:13:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F0195130AC8; Tue, 7 May 2024 07:12:55 +0000 (UTC) Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 52FE61292E4 for ; Tue, 7 May 2024 07:12:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715065975; cv=none; b=H1jjFozxheipmV9HGdNmkuSIXw2aM9pELMoPkEsvA6IL/r+7L2dVH1OegLyk5HDzA7PM1iQpZrx4GCMApMaMzXb0021+6khExxg54KjXVidv3P+SKlwfRcm5fvhlz0uaVJVQbSz2CJLt6OuG3rO3taj/v+eHQUJ81owvMx13nG0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715065975; c=relaxed/simple; bh=jx4QM2+hqykjqBrZD5Vz7z8aLy28+8IOi8v2KPsTlU4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=VLEd3GM17wRvCqKi0VQVyM2FFkwiQ/cwVOvJuDyyeMGrkKDqhsa3Mvgtzxwz1ifjsG0MPpXBysDFEG2tPtUW+BQiUlRNp+1vVIqC8hQRE6kYZJLqHvicBOazBEvPAth8YLFVV/tfM58X6jPHkPdJ8ZzQYQm5zQI0lfAokZuQyYY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1s4F03-0006tH-Up; Tue, 07 May 2024 09:12:31 +0200 Received: from [2a0a:edc0:2:b01:1d::c5] (helo=pty.whiteo.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s4F02-0003M0-KH; Tue, 07 May 2024 09:12:30 +0200 Received: from sha by pty.whiteo.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1s4F02-00GMEv-1j; Tue, 07 May 2024 09:12:30 +0200 Date: Tue, 7 May 2024 09:12:30 +0200 From: Sascha Hauer To: Miquel Raynal Cc: Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/4] mtd: nand: mxc_nand: support software ECC Message-ID: References: <20240417-mtd-nand-mxc-nand-exec-op-v1-0-d12564fe54e9@pengutronix.de> <20240417-mtd-nand-mxc-nand-exec-op-v1-3-d12564fe54e9@pengutronix.de> <20240506160508.6c60d50f@xps-13> <20240506175106.2ab7c844@xps-13> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240506175106.2ab7c844@xps-13> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org On Mon, May 06, 2024 at 05:51:06PM +0200, Miquel Raynal wrote: > Hi Miquel, > > miquel.raynal@bootlin.com wrote on Mon, 6 May 2024 16:05:08 +0200: > > > Hi Sascha, > > > > s.hauer@pengutronix.de wrote on Wed, 17 Apr 2024 09:13:30 +0200: > > > > > To support software ECC we still need the driver provided read_oob, > > > read_page_raw and write_page_raw ops, so set them unconditionally > > > no matter which engine_type we use. The OOB layout on the other hand > > > represents the layout the i.MX ECC hardware uses, so set this only > > > when NAND_ECC_ENGINE_TYPE_ON_HOST is in use. > > > > > > With these changes the driver can be used with software BCH ECC which > > > is useful for NAND chips that require a stronger ECC than the i.MX > > > hardware supports. > > > > > > Signed-off-by: Sascha Hauer > > > --- > > > drivers/mtd/nand/raw/mxc_nand.c | 9 +++++---- > > > 1 file changed, 5 insertions(+), 4 deletions(-) > > > > > > diff --git a/drivers/mtd/nand/raw/mxc_nand.c b/drivers/mtd/nand/raw/mxc_nand.c > > > index fc70c65dea268..f44c130dca18d 100644 > > > --- a/drivers/mtd/nand/raw/mxc_nand.c > > > +++ b/drivers/mtd/nand/raw/mxc_nand.c > > > @@ -1394,15 +1394,16 @@ static int mxcnd_attach_chip(struct nand_chip *chip) > > > chip->ecc.bytes = host->devtype_data->eccbytes; > > > host->eccsize = host->devtype_data->eccsize; > > > chip->ecc.size = 512; > > > - mtd_set_ooblayout(mtd, host->devtype_data->ooblayout); > > > + > > > + chip->ecc.read_oob = mxc_nand_read_oob; > > > + chip->ecc.read_page_raw = mxc_nand_read_page_raw; > > > + chip->ecc.write_page_raw = mxc_nand_write_page_raw; > > A second thought on this. Maybe you should consider keeping these for > on-host operations only. > > The read/write_page_raw operations are supposed to detangle the data > organization to show a proper [all data][all oob] organization to the > user. Let me take one step back. The organisation in the raw NAND is like this when using hardware ECC: [512b data0][16b oob0][512b data1][16b oob1][512b data2][16b oob2][512b data3][16b oob3] For a standard 2k+64b NAND. The read/write_page_raw operations detangle this and present the data to the user like this: [2048b data][64b OOB] Is this the correct behaviour or should that be changed? (Side note: The GPMI NAND driver behaves differently here. It has the same interleaved organisation on the chip and also presents the same interleaved organisation to the user when using read_page_raw) With my current approach for software ECC the same layout is used on the NAND chip. It would interleave the data with the OOB on the NAND chip and, since using the same read/write_page_raw operations, also presents [2048b data][64b OOB] to the user. This works fine currently, but means that NAND_CMD_RNDOUT can't be used. Using NAND_CMD_RNDOUT to position the cursor at offset 512b for example doesn't give you the second subpage, but instead oob0. Positioning the cursor at offset 2048 doesn't give you the start of OOB, but some position in the middle of data3. Ok, NAND_CMD_RNDOUT can't be used for hardware ECC and there's no way around it. For software ECC we could change the organisation in the chip to be [2048b data][64b oob]. With that NAND_CMD_RNDOUT then could be used with software ECC. You say that NAND_CMD_RNDOUT is a basic command that is supported by all controllers, and yes, it is also supported with the mxc_nand controller. You just can't control how many bytes are transferred between the NAND chip and the controller. When using NAND_CMD_RNDOUT to read a few bytes at a certain page offset we'll end up reading 512 bytes discarding most of it. For the next ECC block we would move the cursor forward using another NAND_CMD_RNDOUT command, again read 512 bytes and discard most it (altough the desired data would have been in the first read already). So I think NAND_CMD_RNDOUT should really be avoided for this controller, eventhough we might be able to support it. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |