Commit f5b8aa78 authored by Boris BREZILLON's avatar Boris BREZILLON Committed by Brian Norris

mtd: kill the ecclayout->oobavail field

ecclayout->oobavail is just redundant with the mtd->oobavail field.
Moreover, it prevents static const definition of ecc layouts since the
NAND framework is calculating this value based on the ecclayout->oobfree
field.
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 9ebfdf5b
...@@ -72,13 +72,11 @@ MODULE_PARM_DESC(reliable_mode, "Set the docg3 mode (0=normal MLC, 1=fast, " ...@@ -72,13 +72,11 @@ MODULE_PARM_DESC(reliable_mode, "Set the docg3 mode (0=normal MLC, 1=fast, "
* @eccbytes: 8 bytes are used (1 for Hamming ECC, 7 for BCH ECC) * @eccbytes: 8 bytes are used (1 for Hamming ECC, 7 for BCH ECC)
* @eccpos: ecc positions (byte 7 is Hamming ECC, byte 8-14 are BCH ECC) * @eccpos: ecc positions (byte 7 is Hamming ECC, byte 8-14 are BCH ECC)
* @oobfree: free pageinfo bytes (byte 0 until byte 6, byte 15 * @oobfree: free pageinfo bytes (byte 0 until byte 6, byte 15
* @oobavail: 8 available bytes remaining after ECC toll
*/ */
static struct nand_ecclayout docg3_oobinfo = { static struct nand_ecclayout docg3_oobinfo = {
.eccbytes = 8, .eccbytes = 8,
.eccpos = {7, 8, 9, 10, 11, 12, 13, 14}, .eccpos = {7, 8, 9, 10, 11, 12, 13, 14},
.oobfree = {{0, 7}, {15, 1} }, .oobfree = {{0, 7}, {15, 1} },
.oobavail = 8,
}; };
static inline u8 doc_readb(struct docg3 *docg3, u16 reg) static inline u8 doc_readb(struct docg3 *docg3, u16 reg)
...@@ -1438,7 +1436,7 @@ static int doc_write_oob(struct mtd_info *mtd, loff_t ofs, ...@@ -1438,7 +1436,7 @@ static int doc_write_oob(struct mtd_info *mtd, loff_t ofs,
oobdelta = mtd->oobsize; oobdelta = mtd->oobsize;
break; break;
case MTD_OPS_AUTO_OOB: case MTD_OPS_AUTO_OOB:
oobdelta = mtd->ecclayout->oobavail; oobdelta = mtd->oobavail;
break; break;
default: default:
return -EINVAL; return -EINVAL;
...@@ -1860,6 +1858,7 @@ static int __init doc_set_driver_info(int chip_id, struct mtd_info *mtd) ...@@ -1860,6 +1858,7 @@ static int __init doc_set_driver_info(int chip_id, struct mtd_info *mtd)
mtd->_write_oob = doc_write_oob; mtd->_write_oob = doc_write_oob;
mtd->_block_isbad = doc_block_isbad; mtd->_block_isbad = doc_block_isbad;
mtd->ecclayout = &docg3_oobinfo; mtd->ecclayout = &docg3_oobinfo;
mtd->oobavail = 8;
mtd->ecc_strength = DOC_ECC_BCH_T; mtd->ecc_strength = DOC_ECC_BCH_T;
return 0; return 0;
......
...@@ -346,7 +346,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb) ...@@ -346,7 +346,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb)
if (mtd_can_have_bb(d->mtd) && mtd_block_isbad(d->mtd, offset)) if (mtd_can_have_bb(d->mtd) && mtd_block_isbad(d->mtd, offset))
return MTDSWAP_SCANNED_BAD; return MTDSWAP_SCANNED_BAD;
ops.ooblen = 2 * d->mtd->ecclayout->oobavail; ops.ooblen = 2 * d->mtd->oobavail;
ops.oobbuf = d->oob_buf; ops.oobbuf = d->oob_buf;
ops.ooboffs = 0; ops.ooboffs = 0;
ops.datbuf = NULL; ops.datbuf = NULL;
...@@ -359,7 +359,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb) ...@@ -359,7 +359,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb)
data = (struct mtdswap_oobdata *)d->oob_buf; data = (struct mtdswap_oobdata *)d->oob_buf;
data2 = (struct mtdswap_oobdata *) data2 = (struct mtdswap_oobdata *)
(d->oob_buf + d->mtd->ecclayout->oobavail); (d->oob_buf + d->mtd->oobavail);
if (le16_to_cpu(data->magic) == MTDSWAP_MAGIC_CLEAN) { if (le16_to_cpu(data->magic) == MTDSWAP_MAGIC_CLEAN) {
eb->erase_count = le32_to_cpu(data->count); eb->erase_count = le32_to_cpu(data->count);
...@@ -933,7 +933,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d, ...@@ -933,7 +933,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d,
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = mtd->writesize; ops.len = mtd->writesize;
ops.ooblen = mtd->ecclayout->oobavail; ops.ooblen = mtd->oobavail;
ops.ooboffs = 0; ops.ooboffs = 0;
ops.datbuf = d->page_buf; ops.datbuf = d->page_buf;
ops.oobbuf = d->oob_buf; ops.oobbuf = d->oob_buf;
...@@ -945,7 +945,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d, ...@@ -945,7 +945,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d,
for (i = 0; i < mtd_pages; i++) { for (i = 0; i < mtd_pages; i++) {
patt = mtdswap_test_patt(test + i); patt = mtdswap_test_patt(test + i);
memset(d->page_buf, patt, mtd->writesize); memset(d->page_buf, patt, mtd->writesize);
memset(d->oob_buf, patt, mtd->ecclayout->oobavail); memset(d->oob_buf, patt, mtd->oobavail);
ret = mtd_write_oob(mtd, pos, &ops); ret = mtd_write_oob(mtd, pos, &ops);
if (ret) if (ret)
goto error; goto error;
...@@ -964,7 +964,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d, ...@@ -964,7 +964,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d,
if (p1[j] != patt) if (p1[j] != patt)
goto error; goto error;
for (j = 0; j < mtd->ecclayout->oobavail; j++) for (j = 0; j < mtd->oobavail; j++)
if (p2[j] != (unsigned char)patt) if (p2[j] != (unsigned char)patt)
goto error; goto error;
...@@ -1387,7 +1387,7 @@ static int mtdswap_init(struct mtdswap_dev *d, unsigned int eblocks, ...@@ -1387,7 +1387,7 @@ static int mtdswap_init(struct mtdswap_dev *d, unsigned int eblocks,
if (!d->page_buf) if (!d->page_buf)
goto page_buf_fail; goto page_buf_fail;
d->oob_buf = kmalloc(2 * mtd->ecclayout->oobavail, GFP_KERNEL); d->oob_buf = kmalloc(2 * mtd->oobavail, GFP_KERNEL);
if (!d->oob_buf) if (!d->oob_buf)
goto oob_buf_fail; goto oob_buf_fail;
...@@ -1454,10 +1454,10 @@ static void mtdswap_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd) ...@@ -1454,10 +1454,10 @@ static void mtdswap_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
return; return;
} }
if (!mtd->oobsize || oinfo->oobavail < MTDSWAP_OOBSIZE) { if (!mtd->oobsize || mtd->oobavail < MTDSWAP_OOBSIZE) {
printk(KERN_ERR "%s: Not enough free bytes in OOB, " printk(KERN_ERR "%s: Not enough free bytes in OOB, "
"%d available, %zu needed.\n", "%d available, %zu needed.\n",
MTDSWAP_PREFIX, oinfo->oobavail, MTDSWAP_OOBSIZE); MTDSWAP_PREFIX, mtd->oobavail, MTDSWAP_OOBSIZE);
return; return;
} }
......
...@@ -828,7 +828,8 @@ static struct nand_ecclayout *brcmnand_create_layout(int ecc_level, ...@@ -828,7 +828,8 @@ static struct nand_ecclayout *brcmnand_create_layout(int ecc_level,
idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1) idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1)
break; break;
} }
goto out;
return layout;
} }
/* /*
...@@ -879,10 +880,7 @@ static struct nand_ecclayout *brcmnand_create_layout(int ecc_level, ...@@ -879,10 +880,7 @@ static struct nand_ecclayout *brcmnand_create_layout(int ecc_level,
idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1) idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1)
break; break;
} }
out:
/* Sum available OOB */
for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES_LARGE; i++)
layout->oobavail += layout->oobfree[i].length;
return layout; return layout;
} }
......
...@@ -225,7 +225,6 @@ struct docg4_priv { ...@@ -225,7 +225,6 @@ struct docg4_priv {
static struct nand_ecclayout docg4_oobinfo = { static struct nand_ecclayout docg4_oobinfo = {
.eccbytes = 9, .eccbytes = 9,
.eccpos = {7, 8, 9, 10, 11, 12, 13, 14, 15}, .eccpos = {7, 8, 9, 10, 11, 12, 13, 14, 15},
.oobavail = 5,
.oobfree = { {.offset = 2, .length = 5} } .oobfree = { {.offset = 2, .length = 5} }
}; };
......
...@@ -632,7 +632,6 @@ static void hisi_nfc_host_init(struct hinfc_host *host) ...@@ -632,7 +632,6 @@ static void hisi_nfc_host_init(struct hinfc_host *host)
} }
static struct nand_ecclayout nand_ecc_2K_16bits = { static struct nand_ecclayout nand_ecc_2K_16bits = {
.oobavail = 6,
.oobfree = { {2, 6} }, .oobfree = { {2, 6} },
}; };
......
...@@ -2076,7 +2076,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from, ...@@ -2076,7 +2076,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
stats = mtd->ecc_stats; stats = mtd->ecc_stats;
if (ops->mode == MTD_OPS_AUTO_OOB) if (ops->mode == MTD_OPS_AUTO_OOB)
len = chip->ecc.layout->oobavail; len = mtd->oobavail;
else else
len = mtd->oobsize; len = mtd->oobsize;
...@@ -2767,7 +2767,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to, ...@@ -2767,7 +2767,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
__func__, (unsigned int)to, (int)ops->ooblen); __func__, (unsigned int)to, (int)ops->ooblen);
if (ops->mode == MTD_OPS_AUTO_OOB) if (ops->mode == MTD_OPS_AUTO_OOB)
len = chip->ecc.layout->oobavail; len = mtd->oobavail;
else else
len = mtd->oobsize; len = mtd->oobsize;
...@@ -4325,11 +4325,11 @@ int nand_scan_tail(struct mtd_info *mtd) ...@@ -4325,11 +4325,11 @@ int nand_scan_tail(struct mtd_info *mtd)
* The number of bytes available for a client to place data into * The number of bytes available for a client to place data into
* the out of band area. * the out of band area.
*/ */
ecc->layout->oobavail = 0; mtd->oobavail = 0;
for (i = 0; ecc->layout->oobfree[i].length if (ecc->layout) {
&& i < ARRAY_SIZE(ecc->layout->oobfree); i++) for (i = 0; ecc->layout->oobfree[i].length; i++)
ecc->layout->oobavail += ecc->layout->oobfree[i].length; mtd->oobavail += ecc->layout->oobfree[i].length;
mtd->oobavail = ecc->layout->oobavail; }
/* ECC sanity check: warn if it's too weak */ /* ECC sanity check: warn if it's too weak */
if (!nand_ecc_strength_good(mtd)) if (!nand_ecc_strength_good(mtd))
......
...@@ -1125,7 +1125,7 @@ static int onenand_mlc_read_ops_nolock(struct mtd_info *mtd, loff_t from, ...@@ -1125,7 +1125,7 @@ static int onenand_mlc_read_ops_nolock(struct mtd_info *mtd, loff_t from,
(int)len); (int)len);
if (ops->mode == MTD_OPS_AUTO_OOB) if (ops->mode == MTD_OPS_AUTO_OOB)
oobsize = this->ecclayout->oobavail; oobsize = mtd->oobavail;
else else
oobsize = mtd->oobsize; oobsize = mtd->oobsize;
...@@ -1230,7 +1230,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from, ...@@ -1230,7 +1230,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
(int)len); (int)len);
if (ops->mode == MTD_OPS_AUTO_OOB) if (ops->mode == MTD_OPS_AUTO_OOB)
oobsize = this->ecclayout->oobavail; oobsize = mtd->oobavail;
else else
oobsize = mtd->oobsize; oobsize = mtd->oobsize;
...@@ -1365,7 +1365,7 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from, ...@@ -1365,7 +1365,7 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from,
ops->oobretlen = 0; ops->oobretlen = 0;
if (mode == MTD_OPS_AUTO_OOB) if (mode == MTD_OPS_AUTO_OOB)
oobsize = this->ecclayout->oobavail; oobsize = mtd->oobavail;
else else
oobsize = mtd->oobsize; oobsize = mtd->oobsize;
...@@ -1887,7 +1887,7 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to, ...@@ -1887,7 +1887,7 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to,
return 0; return 0;
if (ops->mode == MTD_OPS_AUTO_OOB) if (ops->mode == MTD_OPS_AUTO_OOB)
oobsize = this->ecclayout->oobavail; oobsize = mtd->oobavail;
else else
oobsize = mtd->oobsize; oobsize = mtd->oobsize;
...@@ -2063,7 +2063,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to, ...@@ -2063,7 +2063,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
ops->oobretlen = 0; ops->oobretlen = 0;
if (mode == MTD_OPS_AUTO_OOB) if (mode == MTD_OPS_AUTO_OOB)
oobsize = this->ecclayout->oobavail; oobsize = mtd->oobavail;
else else
oobsize = mtd->oobsize; oobsize = mtd->oobsize;
...@@ -4050,12 +4050,10 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) ...@@ -4050,12 +4050,10 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
* The number of bytes available for a client to place data into * The number of bytes available for a client to place data into
* the out of band area * the out of band area
*/ */
this->ecclayout->oobavail = 0; mtd->oobavail = 0;
for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES &&
this->ecclayout->oobfree[i].length; i++) this->ecclayout->oobfree[i].length; i++)
this->ecclayout->oobavail += mtd->oobavail += this->ecclayout->oobfree[i].length;
this->ecclayout->oobfree[i].length;
mtd->oobavail = this->ecclayout->oobavail;
mtd->ecclayout = this->ecclayout; mtd->ecclayout = this->ecclayout;
mtd->ecc_strength = 1; mtd->ecc_strength = 1;
......
...@@ -215,19 +215,19 @@ static int verify_eraseblock(int ebnum) ...@@ -215,19 +215,19 @@ static int verify_eraseblock(int ebnum)
pr_info("ignoring error as within bitflip_limit\n"); pr_info("ignoring error as within bitflip_limit\n");
} }
if (use_offset != 0 || use_len < mtd->ecclayout->oobavail) { if (use_offset != 0 || use_len < mtd->oobavail) {
int k; int k;
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = 0; ops.len = 0;
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = mtd->ecclayout->oobavail; ops.ooblen = mtd->oobavail;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = 0; ops.ooboffs = 0;
ops.datbuf = NULL; ops.datbuf = NULL;
ops.oobbuf = readbuf; ops.oobbuf = readbuf;
err = mtd_read_oob(mtd, addr, &ops); err = mtd_read_oob(mtd, addr, &ops);
if (err || ops.oobretlen != mtd->ecclayout->oobavail) { if (err || ops.oobretlen != mtd->oobavail) {
pr_err("error: readoob failed at %#llx\n", pr_err("error: readoob failed at %#llx\n",
(long long)addr); (long long)addr);
errcnt += 1; errcnt += 1;
...@@ -244,7 +244,7 @@ static int verify_eraseblock(int ebnum) ...@@ -244,7 +244,7 @@ static int verify_eraseblock(int ebnum)
/* verify post-(use_offset + use_len) area for 0xff */ /* verify post-(use_offset + use_len) area for 0xff */
k = use_offset + use_len; k = use_offset + use_len;
bitflips += memffshow(addr, k, readbuf + k, bitflips += memffshow(addr, k, readbuf + k,
mtd->ecclayout->oobavail - k); mtd->oobavail - k);
if (bitflips > bitflip_limit) { if (bitflips > bitflip_limit) {
pr_err("error: verify failed at %#llx\n", pr_err("error: verify failed at %#llx\n",
...@@ -269,8 +269,8 @@ static int verify_eraseblock_in_one_go(int ebnum) ...@@ -269,8 +269,8 @@ static int verify_eraseblock_in_one_go(int ebnum)
struct mtd_oob_ops ops; struct mtd_oob_ops ops;
int err = 0; int err = 0;
loff_t addr = (loff_t)ebnum * mtd->erasesize; loff_t addr = (loff_t)ebnum * mtd->erasesize;
size_t len = mtd->ecclayout->oobavail * pgcnt; size_t len = mtd->oobavail * pgcnt;
size_t oobavail = mtd->ecclayout->oobavail; size_t oobavail = mtd->oobavail;
size_t bitflips; size_t bitflips;
int i; int i;
...@@ -394,8 +394,8 @@ static int __init mtd_oobtest_init(void) ...@@ -394,8 +394,8 @@ static int __init mtd_oobtest_init(void)
goto out; goto out;
use_offset = 0; use_offset = 0;
use_len = mtd->ecclayout->oobavail; use_len = mtd->oobavail;
use_len_max = mtd->ecclayout->oobavail; use_len_max = mtd->oobavail;
vary_offset = 0; vary_offset = 0;
/* First test: write all OOB, read it back and verify */ /* First test: write all OOB, read it back and verify */
...@@ -460,8 +460,8 @@ static int __init mtd_oobtest_init(void) ...@@ -460,8 +460,8 @@ static int __init mtd_oobtest_init(void)
/* Write all eraseblocks */ /* Write all eraseblocks */
use_offset = 0; use_offset = 0;
use_len = mtd->ecclayout->oobavail; use_len = mtd->oobavail;
use_len_max = mtd->ecclayout->oobavail; use_len_max = mtd->oobavail;
vary_offset = 1; vary_offset = 1;
prandom_seed_state(&rnd_state, 5); prandom_seed_state(&rnd_state, 5);
...@@ -471,8 +471,8 @@ static int __init mtd_oobtest_init(void) ...@@ -471,8 +471,8 @@ static int __init mtd_oobtest_init(void)
/* Check all eraseblocks */ /* Check all eraseblocks */
use_offset = 0; use_offset = 0;
use_len = mtd->ecclayout->oobavail; use_len = mtd->oobavail;
use_len_max = mtd->ecclayout->oobavail; use_len_max = mtd->oobavail;
vary_offset = 1; vary_offset = 1;
prandom_seed_state(&rnd_state, 5); prandom_seed_state(&rnd_state, 5);
err = verify_all_eraseblocks(); err = verify_all_eraseblocks();
...@@ -480,8 +480,8 @@ static int __init mtd_oobtest_init(void) ...@@ -480,8 +480,8 @@ static int __init mtd_oobtest_init(void)
goto out; goto out;
use_offset = 0; use_offset = 0;
use_len = mtd->ecclayout->oobavail; use_len = mtd->oobavail;
use_len_max = mtd->ecclayout->oobavail; use_len_max = mtd->oobavail;
vary_offset = 0; vary_offset = 0;
/* Fourth test: try to write off end of device */ /* Fourth test: try to write off end of device */
...@@ -501,7 +501,7 @@ static int __init mtd_oobtest_init(void) ...@@ -501,7 +501,7 @@ static int __init mtd_oobtest_init(void)
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = 1; ops.ooblen = 1;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = mtd->ecclayout->oobavail; ops.ooboffs = mtd->oobavail;
ops.datbuf = NULL; ops.datbuf = NULL;
ops.oobbuf = writebuf; ops.oobbuf = writebuf;
pr_info("attempting to start write past end of OOB\n"); pr_info("attempting to start write past end of OOB\n");
...@@ -521,7 +521,7 @@ static int __init mtd_oobtest_init(void) ...@@ -521,7 +521,7 @@ static int __init mtd_oobtest_init(void)
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = 1; ops.ooblen = 1;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = mtd->ecclayout->oobavail; ops.ooboffs = mtd->oobavail;
ops.datbuf = NULL; ops.datbuf = NULL;
ops.oobbuf = readbuf; ops.oobbuf = readbuf;
pr_info("attempting to start read past end of OOB\n"); pr_info("attempting to start read past end of OOB\n");
...@@ -543,7 +543,7 @@ static int __init mtd_oobtest_init(void) ...@@ -543,7 +543,7 @@ static int __init mtd_oobtest_init(void)
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = 0; ops.len = 0;
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = mtd->ecclayout->oobavail + 1; ops.ooblen = mtd->oobavail + 1;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = 0; ops.ooboffs = 0;
ops.datbuf = NULL; ops.datbuf = NULL;
...@@ -563,7 +563,7 @@ static int __init mtd_oobtest_init(void) ...@@ -563,7 +563,7 @@ static int __init mtd_oobtest_init(void)
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = 0; ops.len = 0;
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = mtd->ecclayout->oobavail + 1; ops.ooblen = mtd->oobavail + 1;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = 0; ops.ooboffs = 0;
ops.datbuf = NULL; ops.datbuf = NULL;
...@@ -587,7 +587,7 @@ static int __init mtd_oobtest_init(void) ...@@ -587,7 +587,7 @@ static int __init mtd_oobtest_init(void)
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = 0; ops.len = 0;
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = mtd->ecclayout->oobavail; ops.ooblen = mtd->oobavail;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = 1; ops.ooboffs = 1;
ops.datbuf = NULL; ops.datbuf = NULL;
...@@ -607,7 +607,7 @@ static int __init mtd_oobtest_init(void) ...@@ -607,7 +607,7 @@ static int __init mtd_oobtest_init(void)
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = 0; ops.len = 0;
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = mtd->ecclayout->oobavail; ops.ooblen = mtd->oobavail;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = 1; ops.ooboffs = 1;
ops.datbuf = NULL; ops.datbuf = NULL;
...@@ -638,7 +638,7 @@ static int __init mtd_oobtest_init(void) ...@@ -638,7 +638,7 @@ static int __init mtd_oobtest_init(void)
for (i = 0; i < ebcnt - 1; ++i) { for (i = 0; i < ebcnt - 1; ++i) {
int cnt = 2; int cnt = 2;
int pg; int pg;
size_t sz = mtd->ecclayout->oobavail; size_t sz = mtd->oobavail;
if (bbt[i] || bbt[i + 1]) if (bbt[i] || bbt[i + 1])
continue; continue;
addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize;
...@@ -673,13 +673,12 @@ static int __init mtd_oobtest_init(void) ...@@ -673,13 +673,12 @@ static int __init mtd_oobtest_init(void)
for (i = 0; i < ebcnt - 1; ++i) { for (i = 0; i < ebcnt - 1; ++i) {
if (bbt[i] || bbt[i + 1]) if (bbt[i] || bbt[i + 1])
continue; continue;
prandom_bytes_state(&rnd_state, writebuf, prandom_bytes_state(&rnd_state, writebuf, mtd->oobavail * 2);
mtd->ecclayout->oobavail * 2);
addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize;
ops.mode = MTD_OPS_AUTO_OOB; ops.mode = MTD_OPS_AUTO_OOB;
ops.len = 0; ops.len = 0;
ops.retlen = 0; ops.retlen = 0;
ops.ooblen = mtd->ecclayout->oobavail * 2; ops.ooblen = mtd->oobavail * 2;
ops.oobretlen = 0; ops.oobretlen = 0;
ops.ooboffs = 0; ops.ooboffs = 0;
ops.datbuf = NULL; ops.datbuf = NULL;
...@@ -688,7 +687,7 @@ static int __init mtd_oobtest_init(void) ...@@ -688,7 +687,7 @@ static int __init mtd_oobtest_init(void)
if (err) if (err)
goto out; goto out;
if (memcmpshow(addr, readbuf, writebuf, if (memcmpshow(addr, readbuf, writebuf,
mtd->ecclayout->oobavail * 2)) { mtd->oobavail * 2)) {
pr_err("error: verify failed at %#llx\n", pr_err("error: verify failed at %#llx\n",
(long long)addr); (long long)addr);
errcnt += 1; errcnt += 1;
......
...@@ -49,7 +49,6 @@ static struct nand_ecclayout spinand_oob_64 = { ...@@ -49,7 +49,6 @@ static struct nand_ecclayout spinand_oob_64 = {
17, 18, 19, 20, 21, 22, 17, 18, 19, 20, 21, 22,
33, 34, 35, 36, 37, 38, 33, 34, 35, 36, 37, 38,
49, 50, 51, 52, 53, 54, }, 49, 50, 51, 52, 53, 54, },
.oobavail = 32,
.oobfree = { .oobfree = {
{.offset = 8, {.offset = 8,
.length = 8}, .length = 8},
......
...@@ -1183,22 +1183,20 @@ void jffs2_dirty_trigger(struct jffs2_sb_info *c) ...@@ -1183,22 +1183,20 @@ void jffs2_dirty_trigger(struct jffs2_sb_info *c)
int jffs2_nand_flash_setup(struct jffs2_sb_info *c) int jffs2_nand_flash_setup(struct jffs2_sb_info *c)
{ {
struct nand_ecclayout *oinfo = c->mtd->ecclayout;
if (!c->mtd->oobsize) if (!c->mtd->oobsize)
return 0; return 0;
/* Cleanmarker is out-of-band, so inline size zero */ /* Cleanmarker is out-of-band, so inline size zero */
c->cleanmarker_size = 0; c->cleanmarker_size = 0;
if (!oinfo || oinfo->oobavail == 0) { if (c->mtd->oobavail == 0) {
pr_err("inconsistent device description\n"); pr_err("inconsistent device description\n");
return -EINVAL; return -EINVAL;
} }
jffs2_dbg(1, "using OOB on NAND\n"); jffs2_dbg(1, "using OOB on NAND\n");
c->oobavail = oinfo->oobavail; c->oobavail = c->mtd->oobavail;
/* Initialise write buffer */ /* Initialise write buffer */
init_rwsem(&c->wbuf_sem); init_rwsem(&c->wbuf_sem);
......
...@@ -105,7 +105,6 @@ struct mtd_oob_ops { ...@@ -105,7 +105,6 @@ struct mtd_oob_ops {
struct nand_ecclayout { struct nand_ecclayout {
__u32 eccbytes; __u32 eccbytes;
__u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE]; __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE];
__u32 oobavail;
struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE]; struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE];
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment