mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 08:21:14 +00:00
86583384ff
NAND controller is present on BCM6328, BCM6362, BCM6368 and BCM63268. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
43 lines
1.2 KiB
Diff
43 lines
1.2 KiB
Diff
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
|
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
|
@@ -1787,28 +1787,31 @@ static int brcmnand_read_by_pio(struct m
|
|
static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd,
|
|
struct nand_chip *chip, void *buf, u64 addr)
|
|
{
|
|
- int i, sas;
|
|
- void *oob = chip->oob_poi;
|
|
+ struct mtd_oob_region ecc;
|
|
+ int i;
|
|
int bitflips = 0;
|
|
int page = addr >> chip->page_shift;
|
|
int ret;
|
|
+ void *ecc_bytes;
|
|
void *ecc_chunk;
|
|
|
|
if (!buf)
|
|
buf = nand_get_data_buf(chip);
|
|
|
|
- sas = mtd->oobsize / chip->ecc.steps;
|
|
-
|
|
/* read without ecc for verification */
|
|
ret = chip->ecc.read_page_raw(chip, buf, true, page);
|
|
if (ret)
|
|
return ret;
|
|
|
|
- for (i = 0; i < chip->ecc.steps; i++, oob += sas) {
|
|
+ for (i = 0; i < chip->ecc.steps; i++) {
|
|
ecc_chunk = buf + chip->ecc.size * i;
|
|
- ret = nand_check_erased_ecc_chunk(ecc_chunk,
|
|
- chip->ecc.size,
|
|
- oob, sas, NULL, 0,
|
|
+
|
|
+ mtd_ooblayout_ecc(mtd, i, &ecc);
|
|
+ ecc_bytes = chip->oob_poi + ecc.offset;
|
|
+
|
|
+ ret = nand_check_erased_ecc_chunk(ecc_chunk, chip->ecc.size,
|
|
+ ecc_bytes, ecc.length,
|
|
+ NULL, 0,
|
|
chip->ecc.strength);
|
|
if (ret < 0)
|
|
return ret;
|