Received: by 10.192.165.148 with SMTP id m20csp3088387imm; Sun, 22 Apr 2018 23:46:06 -0700 (PDT) X-Google-Smtp-Source: AIpwx49HaA3GvcJc2IwJdeittuXeXPkFkwEKHs252pMJpjwasAFzb8Fpx1XzpeVcCWKxAxpA29kK X-Received: by 10.167.128.81 with SMTP id y17mr18522800pfm.194.1524465966783; Sun, 22 Apr 2018 23:46:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524465966; cv=none; d=google.com; s=arc-20160816; b=Zc8eZaI7g2a4PDVhsP+jOzakuSwr1AX7o5nSU9LcXY1UcE+eN05U1VSAdK1JyjLQyA TSqyC4ZybqN21GOzG7yaq85kRyVzLkSEO+mzupO+IOevquN+tguM1cFVzOe3K6JrT4yA U9oL1Vc+vBwW0hbtQjes4+kt66yl0hSW1ERN3IgopCUb5TXxrHnVSoIwBMPNr8GYjB0z Sot9SlAC49RH3a2mtqkZ5Hws5vNbZjE8zTESTVLiCR5E8uXzo/+1SkbLnrslVTWnbmNR eeRDgMDLQd58oxni8oyYMdvwHHY5NjIewMNyj8I6TrmQNGS0+5q87IhqU4hpprgyzmAn wwoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:message-id:references :in-reply-to:subject:cc:to:from:date:content-transfer-encoding :mime-version:dkim-signature:dkim-signature :arc-authentication-results; bh=V24ZSiIPLcjgdSXvDKRThoAflk6s45iNKYLf/OJNWkA=; b=gG+wk80Lzu/nboZLA3Vyr8tYGTEHZNRxQT2JnfXDuBRzJIej7+eQ7SXlgogGhvtafU tmv3VxHwt2TE6XpPd6LHN4An77DEuULLIlmq9IRmVlr4KN9COqvMj4+P5o8GwvUeZdPm D/lE0JZkKddFzpael/EOiKKAv8y88CZqDhOEkb1Bt1rVRJu0LwR7y/fdgcwmhlYzyBw6 UdbyYtLltgCIAT/iLSJefR2XTqEYKHTdA53aMr8YsbZIwLWBpKjSPmWrkKjIuVvOm+vo SKIN5G6NHniYFxoOd5OeAdg42JI7MXPkmetzjgw89cH4YGJDIkxb3hpfBA9UD/IgVUY1 Vk+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=Zd0ro2QX; dkim=pass header.i=@codeaurora.org header.s=default header.b=GiU/4hcz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u6-v6si10428438pls.11.2018.04.22.23.45.52; Sun, 22 Apr 2018 23:46:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=Zd0ro2QX; dkim=pass header.i=@codeaurora.org header.s=default header.b=GiU/4hcz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754162AbeDWGoh (ORCPT + 99 others); Mon, 23 Apr 2018 02:44:37 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:51198 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753009AbeDWGoe (ORCPT ); Mon, 23 Apr 2018 02:44:34 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 5909860C66; Mon, 23 Apr 2018 06:44:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1524465874; bh=bJeJJV1P5mOzTlLEnITbDaOWpnVIQkW/OmVc8j7+dSM=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=Zd0ro2QXY220un7LB93Toc703sx5OAWPROoNP77Sp5Nv+S4dch7lE58Ese9gnJ6Gq LwDKa4XpsgNHNimEuUrKJeOLJSdcLiNfXoY+2qEH4p4fy2s1Zf0FOfFlEbojdyv7lR 6EeTfOq7Efjy74AHeTRzl9OpPQr3aE6LirPVWx3c= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id E3C64607C6; Mon, 23 Apr 2018 06:44:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1524465873; bh=bJeJJV1P5mOzTlLEnITbDaOWpnVIQkW/OmVc8j7+dSM=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=GiU/4hczVjLyBulqdu0y2/RuLhvPu0oVUpj7a2W4PlVqmRU3J9vIhYH5BaN2OhzrL ybLZghkV3ghFTQp/Qry+Ra300O7WgJysPU3FkSrVVrrFRuBqliQ4hHqw2tCgiccDzi oXnAT9E8nZhMBtWEbFYHATx++kkbS1PXoyC9ZA84= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Mon, 23 Apr 2018 12:14:32 +0530 From: Abhishek Sahu To: Miquel Raynal Cc: Boris Brezillon , Boris Brezillon , Archit Taneja , Richard Weinberger , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, Cyrille Pitchen , Andy Gross , Brian Norris , David Woodhouse Subject: Re: [PATCH 1/9] mtd: nand: qcom: use the ecc strength from device parameter In-Reply-To: <20180422183440.3ce7e7aa@xps13> References: <1522845745-6624-1-git-send-email-absahu@codeaurora.org> <1522845745-6624-2-git-send-email-absahu@codeaurora.org> <20180406143133.67f33d33@xps13> <23c8330d00d4d9b62c4c1ab597cbb22b@codeaurora.org> <20180410094657.63ac7ec9@xps13> <20180410095558.34c4d91f@xps13> <20180410100745.625d66f8@bbrezillon> <20180422183440.3ce7e7aa@xps13> Message-ID: <689fa334d7105e251463e58e1aef3ec8@codeaurora.org> X-Sender: absahu@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2018-04-22 22:04, Miquel Raynal wrote: > Hi Abhishek, > > On Thu, 12 Apr 2018 15:29:48 +0530, Abhishek Sahu > wrote: > >> On 2018-04-10 13:37, Boris Brezillon wrote: >> > On Tue, 10 Apr 2018 09:55:58 +0200 >> > Miquel Raynal wrote: >> > >> > Hi Abhishek, >> >> > >> >> > On Tue, 10 Apr 2018 11:39:35 +0530, Abhishek Sahu >> >> > wrote: >> >> > >> >> > > On 2018-04-06 18:01, Miquel Raynal wrote: >> >> > > > Hi Abhishek, >> >> > > > >> >> > > > On Wed, 4 Apr 2018 18:12:17 +0530, Abhishek Sahu >> >> > > > wrote: >> >> > > > >> >> > > >> Currently the driver uses the ECC strength specified in >> >> > > >> device tree. The ONFI or JEDEC device parameter page >> >> > > >> contains the ‘ECC correctability’ field which indicates the >> >> > > >> number of bits that the host should be able to correct per >> >> > > >> 512 bytes of data. >> >> > > > >> >> > > > This is misleading. This field is not about the controller but rather >> >> > > > the chip requirements in terms of minimal strength for nominal use. >> >> > > > >> >> > > >> >> > > Thanks Miquel. >> >> > > >> >> > > Yes. Its NAND chip requirement. I have used the description for >> >> > > NAND ONFI param page >> >> > > >> >> > > 5.6.1.24. Byte 112: Number of bits ECC correctability >> >> > > This field indicates the number of bits that the host should be >> >> > > able to correct per 512 bytes of data. >> >> > > >> >> > > >> The ecc correctability is assigned in >> >> > > >> chip parameter during device probe time. QPIC/EBI2 NAND >> >> > > >> supports 4/8-bit ecc correction. The Same kind of board >> >> > > >> can have different NAND parts so use the ecc strength >> >> > > >> from device parameter (if its non zero) instead of >> >> > > >> device tree. >> >> > > > >> >> > > > That is not what you do. >> >> > > > >> >> > > > What you do is forcing the strength to be 8-bit per ECC chunk if the >> >> > > > NAND chip requires at least 8-bit/chunk strength. >> >> > > > >> >> > > > The DT property is here to force a strength. Otherwise, Linux will >> >> > > > propose to the NAND controller to use the minimum strength required by >> >> > > > the chip (from either the ONFI/JEDEC parameter page or from a static >> >> > > > table). >> >> > > > >> >> > > >> >> > > The main problem is that the same kind of boards can have different >> >> > > NAND parts. >> >> > > >> >> > > Lets assume, we have following 2 cases. >> >> > > >> >> > > 1. Non ONFI/JEDEC device for which chip->ecc_strength_ds >> >> > > will be zero. In this case, the ecc->strength from DT >> >> > > will be used >> >> > >> >> > No, the strength from DT will always be used if the property is >> >> > present, no matter the type of chip. >> >> > >> >> > > 2. ONFI/JEDEC device for which chip->ecc_strength_ds > 8. >> >> > > Since QCOM nand controller can not support >> >> > > ECC correction greater than 8 bits so we can use 8 bit ECC >> >> > > itself instead of failing NAND boot completely. >> >> > >> >> > I understand that. But this is still not what you do. >> >> > >> >> > > >> >> > > > IMHO, you have two solutions: >> >> > > > 1/ Remove these properties from the board DT (breaks DT backward >> >> > > > compatibility though); >> >> > > >> >> > > - nand-ecc-strength: This is optional property in nand.txt and >> >> > > Required property in qcom_nandc.txt. >> >> > >> >> > Well, this property is not controller specific but chip specific. The >> >> > controller driver does not rely on it, so this property should not be >> >> > required. >> >> > >> >> > > We can't remove since >> >> > > if the device is Non ONFI/JEDEC, then ecc strength will come >> >> > > from DT only. >> >> > >> >> > We can remove it and let the core handle this (as this is generic to >> >> > all raw NANDs and not specific to this controller driver). Try it out! >> >> Thanks Boris and Miquel for your inputs. >> >> Just want to confirm if already its implemented in core layer >> or shall I explore regrading this option. >> >> I checked by removing this property alone from dtsi and it was >> failing with >> >> "Driver must set ecc.strength when using hardware ECC" >> >> I checked the code in nand_base.c also but couldn't get >> anything related with this. > > I don't know exactly what you did but you should have a look at what > lead you to this path: > https://elixir.bootlin.com/linux/v4.17-rc1/source/drivers/mtd/nand/raw/nand_base.c#L6421 > Our driver supports both ECC strength 4 bits and 8 bits and normally till now, we need to specify the ecc strength in device tree. Now, since same board can have different ECC strength chip so we can't fix the ecc strength in device tree and we need to look the required correction in ONFI param. We can have some code in generic layer which 1. Provides the way to specify the supported strength in DT by NAND controller (for our case, it is 4 and 8) 2. Read the chip ONFI/JEDEC Param and choose the configure to use controller strength according to its requirement. 3. For Non ONFI/JEDEC devices, choose the maximum strength according to OOB bytes. I just want to check if we have something like this already in place or I can add the same in generic code so that this can be used by other drivers also. Thanks, Abhishek