35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From cf0d2fbaae9e962d91a321de75e0d4f9f9ccbdfe Mon Sep 17 00:00:00 2001
 | |
| From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
 | |
| Date: Thu, 21 Jan 2021 18:17:37 +0100
 | |
| Subject: [PATCH] nand: brcmnand: fix OOB R/W with Hamming ECC
 | |
| MIME-Version: 1.0
 | |
| Content-Type: text/plain; charset=UTF-8
 | |
| Content-Transfer-Encoding: 8bit
 | |
| 
 | |
| Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
 | |
| always be done without ECC enabled.
 | |
| This is a problem when adding JFFS2 cleanmarkers to erased blocks. When JFFS2
 | |
| clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed
 | |
| from ff ff ff to 00 00 00, reporting incorrect ECC errors.
 | |
| 
 | |
| Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
 | |
| ---
 | |
|  drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 ++++++
 | |
|  1 file changed, 6 insertions(+)
 | |
| 
 | |
| --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | |
| +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | |
| @@ -2694,6 +2694,12 @@ static int brcmnand_attach_chip(struct n
 | |
|  		chip->ecc.read_oob = brcmnand_read_oob_raw;
 | |
|  	}
 | |
|  
 | |
| +	/* If OOB is written with ECC enabled it will cause ECC errors */
 | |
| +	if (is_hamming_ecc(host->ctrl, &host->hwcfg)) {
 | |
| +		chip->ecc.write_oob = brcmnand_write_oob_raw;
 | |
| +		chip->ecc.read_oob = brcmnand_read_oob_raw;
 | |
| +	}
 | |
| +
 | |
|  	return ret;
 | |
|  }
 | |
|  
 | 
