Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756401AbbFPNeg (ORCPT ); Tue, 16 Jun 2015 09:34:36 -0400 Received: from imx9.toshiba.co.jp ([106.186.93.47]:40024 "EHLO imx9.toshiba.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753736AbbFPNe2 (ORCPT ); Tue, 16 Jun 2015 09:34:28 -0400 Message-ID: <558025B7.3030103@toshiba.co.jp> Date: Tue, 16 Jun 2015 22:33:43 +0900 From: KOBAYASHI Yoshitake User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Richard Weinberger Cc: David Woodhouse , Brian Norris , "linux-mtd@lists.infradead.org" , LKML Subject: Re: [PATCH v2] mtd: nand: support for Toshiba BENAND (Built-in ECC NAND) References: <1434038402-26365-1-git-send-email-yoshitake.kobayashi@toshiba.co.jp> In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2694 Lines: 75 On 2015/06/12 18:49, Richard Weinberger wrote: > On Thu, Jun 11, 2015 at 6:00 PM, KOBAYASHI Yoshitake > wrote: >> This patch enables support for Toshiba BENAND. >> BENAND is a SLC NAND solution that automatically generates ECC inside >> NAND chip. >> >> Some of the comments in the following discussion may need to be considerd. >> https://lkml.org/lkml/2015/3/25/310 > > Yep. > >> +void nand_benand_init(struct mtd_info *mtd) >> +{ >> + struct nand_chip *chip = mtd->priv; >> + >> + pr_info("%s\n", __func__); > > Please kill all these prints. Use ftrace to trace function calls. Okay, I will delete these prints in next patch. >> + chip->ecc.size = mtd->writesize; >> + chip->ecc.strength = 1; > > BENAND can correct only one bit? > This would explain why you consider it as fast. ;-) BENAND is able to correct up to 8bit. By issuing Status command 70h for read operation, BENAND can report three types of ECC operation status (Pass / Fail(uncorrectable) / Recommended to rewrite). Judgement for Recommended to rewrite is based on internal logic of BENAND. >> +int nand_benand_status_chk(struct mtd_info *mtd, struct nand_chip *chip) >> +{ >> + unsigned int bitflips = 0; >> + u8 status; >> + >> + pr_debug("%s\n", __func__); >> + >> + /* Check Read Status */ >> + chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1); >> + status = chip->read_byte(mtd); >> + >> + /* timeout */ >> + if (!(status & NAND_STATUS_READY)) { >> + pr_info("BENAND : Time Out!\n"); >> + return -EIO; >> + } >> + >> + /* uncorrectable */ >> + else if (status & NAND_STATUS_FAIL) { >> + pr_info("BENAND : Uncorrectable!\n"); >> + mtd->ecc_stats.failed++; >> + } >> + >> + /* correctable */ >> + else if (status & NAND_STATUS_RECOM_REWRT) { >> + pr_info("BENAND : Recommended to rewrite!\n"); >> + bitflips = chip->ecc.strength; > > In your case this might be okay, as you set strength to 1. > Otherweise you'd have to report the real number of bitflips. I also thought it is okay in this case. BENAND return corrected data to Host NAND Controller till uncorrectable status. The current patch uses this Read Status command 70h to abstract BENAND Multi bit ECC and Need to Rewrite judgement so BENAND would look like 1bit ECC device. -- Yoshi -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/