Patch "mtd: bcm47xxpart: don't fail because of bit-flips" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
mtd: bcm47xxpart: don't fail because of bit-flips
to the 4.4-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-bcm47xxpart-don-t-fail-because-of-bit-flips.patch
and it can be found in the queue-4.4 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
36bcc0c9c2bc8f56569cd735ba531a51358d7c2bMon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]>
Date: Sun, 6 Dec 2015 11:31:38 +0100
Subject: mtd: bcm47xxpart: don't fail because of bit-flips
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Rafał Miłecki <[email protected]>
commit 36bcc0c9c2bc8f56569cd735ba531a51358d7c2b upstream.
Bit-flip errors may occur on NAND flashes and are harmless. Handle them gracefully as read content is still reliable and can be parsed.
--- drivers/mtd/bcm47xxpart.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-)
drivers/mtd/bcm47xxpart.c +22 -16
@@ -66,11 +66,13 @@ static const char *bcm47xxpart_trx_data_ {uint32_t buf;size_t bytes_read; +int err; -if (mtd_read (master, offset,sizeof (buf), &bytes_read, - (uint8_t *)&buf) <0 ) { -pr_err ("mtd_read error while parsing (offset: 0x%X)!\n" , - offset); + err =mtd_read (master, offset,sizeof (buf), &bytes_read, + (uint8_t *)&buf); +if (err && !mtd_is_bitflip (err)) { +pr_err ("mtd_read error while parsing (offset: 0x%X): %d\n" , + offset, err); goto out_default; }
@@ -95,6 +97,7 @@ static int bcm47xxpart_parse(struct mtd_int trx_part =-1 ;int last_trx_part =-1 ;int possible_nvram_sizes[] = {0x8000 ,0xF000 ,0x10000 , }; +int err;/* * Some really old flashes (like AT45DB*) had smaller erasesize-s, but
@@ -128,10 +131,11 @@ static int bcm47xxpart_parse(struct mtd_ }/* Read beginning of the block */ -if (mtd_read (master, offset,BCM47XXPART_BYTES_TO_READ , - &bytes_read, (uint8_t *)buf) <0 ) { -pr_err ("mtd_read error while parsing (offset: 0x%X)!\n" , - offset); + err =mtd_read (master, offset,BCM47XXPART_BYTES_TO_READ , + &bytes_read, (uint8_t *)buf); +if (err && !mtd_is_bitflip (err)) { +pr_err ("mtd_read error while parsing (offset: 0x%X): %d\n" , + offset, err);continue ; }
@@ -252,10 +256,11 @@ static int bcm47xxpart_parse(struct mtd_ }/* Read middle of the block */ -if (mtd_read (master, offset +0x8000 ,0x4 , - &bytes_read, (uint8_t *)buf) <0 ) { -pr_err ("mtd_read error while parsing (offset: 0x%X)!\n" , - offset); + err =mtd_read (master, offset +0x8000 ,0x4 , &bytes_read, + (uint8_t *)buf); +if (err && !mtd_is_bitflip (err)) { +pr_err ("mtd_read error while parsing (offset: 0x%X): %d\n" , + offset, err);continue ; }
@@ -275,10 +280,11 @@ static int bcm47xxpart_parse(struct mtd_ } offset = master->size - possible_nvram_sizes[i]; -if (mtd_read (master, offset,0x4 , &bytes_read, - (uint8_t *)buf) <0 ) { -pr_err ("mtd_read error while reading at offset 0x%X!\n" , - offset); + err =mtd_read (master, offset,0x4 , &bytes_read, + (uint8_t *)buf); +if (err && !mtd_is_bitflip (err)) { +pr_err ("mtd_read error while reading (offset 0x%X): %d\n" , + offset, err);continue ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/mtd-bcm47xxpart-don-t-fail-because-of-bit-flips.patch queue-4.4/mtd-bcm47xxpart-limit-scanned-flash-area-on-bcm47xx-mips-only.patch