|
@@ -1420,6 +1420,9 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
|
|
|
int ret = 0;
|
|
|
uint32_t readlen = ops->len;
|
|
|
uint32_t oobreadlen = ops->ooblen;
|
|
|
+ uint32_t max_oobsize = ops->mode == MTD_OOB_AUTO ?
|
|
|
+ mtd->oobavail : mtd->oobsize;
|
|
|
+
|
|
|
uint8_t *bufpoi, *oob, *buf;
|
|
|
|
|
|
stats = mtd->ecc_stats;
|
|
@@ -1470,10 +1473,11 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
|
|
|
buf += bytes;
|
|
|
|
|
|
if (unlikely(oob)) {
|
|
|
+
|
|
|
/* Raw mode does data:oob:data:oob */
|
|
|
if (ops->mode != MTD_OOB_RAW) {
|
|
|
int toread = min(oobreadlen,
|
|
|
- chip->ecc.layout->oobavail);
|
|
|
+ max_oobsize);
|
|
|
if (toread) {
|
|
|
oob = nand_transfer_oob(chip,
|
|
|
oob, ops, toread);
|