Patch "mtd: nand: tango: Update ecc_stats.corrected" has been added to the 4.11-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
mtd: nand: tango: Update ecc_stats.corrected
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mtd-nand-tango-update-ecc_stats.corrected.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
60cf0ce14b09b54e7ee79dc3ef498de6ef0e41e9Mon Sep 17 00:00:00 2001
From: Marc Gonzalez <[email protected]>
Date: Fri, 12 May 2017 17:34:01 +0200
Subject: mtd: nand: tango: Update ecc_stats.corrected
From: Marc Gonzalez <[email protected]>
commit 60cf0ce14b09b54e7ee79dc3ef498de6ef0e41e9 upstream.
According to Boris, some user-space tools expect MTD drivers to update ecc_stats.corrected, and it's better to provide a lower bound than to provide no information at all.
--- drivers/mtd/nand/tango_nand.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
drivers/mtd/nand/tango_nand.c +15 -7
@@ -55,10 +55,10 @@* byte 1 for other packets in the page (PKT_N, for N > 0) * ERR_COUNT_PKT_N is the max error count over all but the first packet. */ -#define DECODE_OK_PKT_0 (v) ((v) & BIT(7)) -#define DECODE_OK_PKT_N (v) ((v) & BIT(15))#define ERR_COUNT_PKT_0 (v) (((v) >> 0) & 0x3f)#define ERR_COUNT_PKT_N (v) (((v) >> 8) & 0x3f) +#define DECODE_FAIL_PKT_0 (v) (((v) & BIT(7)) == 0) +#define DECODE_FAIL_PKT_N (v) (((v) & BIT(15)) == 0)/* Offsets relative to pbus_base */ #define PBUS_CS_CTRL 0x83c
@@ -193,6 +193,8 @@ static int check_erased_page(struct nand chip->ecc.strength);if (res <0 ) mtd->ecc_stats.failed++; +else + mtd->ecc_stats.corrected += res; bitflips =max (res, bitflips); buf += pkt_size;
@@ -202,9 +204,11 @@ static int check_erased_page(struct nandreturn bitflips; } -static int decode_error_report (struct tango_nfc *nfc) +static int decode_error_report (struct nand_chip *chip) {u32 status, res; +struct mtd_info *mtd =nand_to_mtd (chip); +struct tango_nfc *nfc =to_tango_nfc (chip->controller); status =readl_relaxed (nfc->reg_base +NFC_XFER_STATUS );if (status &PAGE_IS_EMPTY )
@@ -212,10 +216,14 @@ static int decode_error_report(struct ta res =readl_relaxed (nfc->mem_base +ERROR_REPORT ); -if (DECODE_OK_PKT_0 (res) &&DECODE_OK_PKT_N (res)) -return max (ERR_COUNT_PKT_0 (res),ERR_COUNT_PKT_N (res)); +if (DECODE_FAIL_PKT_0 (res) ||DECODE_FAIL_PKT_N (res)) +return -EBADMSG ; + +/* ERR_COUNT_PKT_N is max, not sum, but that's all we have */ + mtd->ecc_stats.corrected += +ERR_COUNT_PKT_0 (res) +ERR_COUNT_PKT_N (res); -return -EBADMSG ; +return max (ERR_COUNT_PKT_0 (res),ERR_COUNT_PKT_N (res)); }static void tango_dma_callback (void *arg)
@@ -280,7 +288,7 @@ static int tango_read_page(struct mtd_inif (err)return err; - res =decode_error_report (nfc); + res =decode_error_report (chip);if (res <0 ) { chip->ecc.read_oob_raw (mtd, chip, page); res =check_erased_page (chip, buf);
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/mtd-nand-tango-update-ecc_stats.corrected.patch