|
@@ -895,7 +895,7 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *this)
|
|
|
* @buf: buffer to store read data
|
|
|
*/
|
|
|
static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
- uint8_t *buf)
|
|
|
+ uint8_t *buf, int page)
|
|
|
{
|
|
|
chip->read_buf(mtd, buf, mtd->writesize);
|
|
|
chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
|
|
@@ -909,7 +909,7 @@ static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
* @buf: buffer to store read data
|
|
|
*/
|
|
|
static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
- uint8_t *buf)
|
|
|
+ uint8_t *buf, int page)
|
|
|
{
|
|
|
int i, eccsize = chip->ecc.size;
|
|
|
int eccbytes = chip->ecc.bytes;
|
|
@@ -919,7 +919,7 @@ static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
uint8_t *ecc_code = chip->buffers->ecccode;
|
|
|
uint32_t *eccpos = chip->ecc.layout->eccpos;
|
|
|
|
|
|
- chip->ecc.read_page_raw(mtd, chip, buf);
|
|
|
+ chip->ecc.read_page_raw(mtd, chip, buf, page);
|
|
|
|
|
|
for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
|
|
|
chip->ecc.calculate(mtd, p, &ecc_calc[i]);
|
|
@@ -1032,7 +1032,7 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, uint3
|
|
|
* Not for syndrome calculating ecc controllers which need a special oob layout
|
|
|
*/
|
|
|
static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
- uint8_t *buf)
|
|
|
+ uint8_t *buf, int page)
|
|
|
{
|
|
|
int i, eccsize = chip->ecc.size;
|
|
|
int eccbytes = chip->ecc.bytes;
|
|
@@ -1077,7 +1077,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
* we need a special oob layout and handling.
|
|
|
*/
|
|
|
static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
- uint8_t *buf)
|
|
|
+ uint8_t *buf, int page)
|
|
|
{
|
|
|
int i, eccsize = chip->ecc.size;
|
|
|
int eccbytes = chip->ecc.bytes;
|
|
@@ -1219,11 +1219,13 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
|
|
|
|
|
|
/* Now read the page into the buffer */
|
|
|
if (unlikely(ops->mode == MTD_OOB_RAW))
|
|
|
- ret = chip->ecc.read_page_raw(mtd, chip, bufpoi);
|
|
|
+ ret = chip->ecc.read_page_raw(mtd, chip,
|
|
|
+ bufpoi, page);
|
|
|
else if (!aligned && NAND_SUBPAGE_READ(chip) && !oob)
|
|
|
ret = chip->ecc.read_subpage(mtd, chip, col, bytes, bufpoi);
|
|
|
else
|
|
|
- ret = chip->ecc.read_page(mtd, chip, bufpoi);
|
|
|
+ ret = chip->ecc.read_page(mtd, chip, bufpoi,
|
|
|
+ page);
|
|
|
if (ret < 0)
|
|
|
break;
|
|
|
|