mtd: rawnand: Pass a nand_chip object to ecc->read_xxx() hooks

Let's make the raw NAND API consistent by patching all helpers and
hooks to take a nand_chip object instead of an mtd_info one or
remove the mtd_info object when both are passed.

Let's tackle all ecc->read_xxx() hooks at once.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Acked-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
Boris Brezillon
2018-09-06 14:05:20 +02:00
committed by Miquel Raynal
parent 00da2ea972
commit b976168757
28 changed files with 221 additions and 223 deletions

View File

@@ -895,15 +895,13 @@ static int atmel_nand_pmecc_read_pg(struct nand_chip *chip, u8 *buf,
return ret; return ret;
} }
static int atmel_nand_pmecc_read_page(struct mtd_info *mtd, static int atmel_nand_pmecc_read_page(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page, false); return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page, false);
} }
static int atmel_nand_pmecc_read_page_raw(struct mtd_info *mtd, static int atmel_nand_pmecc_read_page_raw(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page, true); return atmel_nand_pmecc_read_pg(chip, buf, oob_required, page, true);
@@ -1037,16 +1035,14 @@ static int atmel_hsmc_nand_pmecc_read_pg(struct nand_chip *chip, u8 *buf,
return ret; return ret;
} }
static int atmel_hsmc_nand_pmecc_read_page(struct mtd_info *mtd, static int atmel_hsmc_nand_pmecc_read_page(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
return atmel_hsmc_nand_pmecc_read_pg(chip, buf, oob_required, page, return atmel_hsmc_nand_pmecc_read_pg(chip, buf, oob_required, page,
false); false);
} }
static int atmel_hsmc_nand_pmecc_read_page_raw(struct mtd_info *mtd, static int atmel_hsmc_nand_pmecc_read_page_raw(struct nand_chip *chip,
struct nand_chip *chip,
u8 *buf, int oob_required, u8 *buf, int oob_required,
int page) int page)
{ {

View File

@@ -1689,7 +1689,7 @@ static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd,
sas = mtd->oobsize / chip->ecc.steps; sas = mtd->oobsize / chip->ecc.steps;
/* read without ecc for verification */ /* read without ecc for verification */
ret = chip->ecc.read_page_raw(mtd, chip, buf, true, page); ret = chip->ecc.read_page_raw(chip, buf, true, page);
if (ret) if (ret)
return ret; return ret;
@@ -1786,9 +1786,10 @@ try_dmaread:
return 0; return 0;
} }
static int brcmnand_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int brcmnand_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct brcmnand_host *host = nand_get_controller_data(chip); struct brcmnand_host *host = nand_get_controller_data(chip);
u8 *oob = oob_required ? (u8 *)chip->oob_poi : NULL; u8 *oob = oob_required ? (u8 *)chip->oob_poi : NULL;
@@ -1798,10 +1799,11 @@ static int brcmnand_read_page(struct mtd_info *mtd, struct nand_chip *chip,
mtd->writesize >> FC_SHIFT, (u32 *)buf, oob); mtd->writesize >> FC_SHIFT, (u32 *)buf, oob);
} }
static int brcmnand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, static int brcmnand_read_page_raw(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct brcmnand_host *host = nand_get_controller_data(chip); struct brcmnand_host *host = nand_get_controller_data(chip);
struct mtd_info *mtd = nand_to_mtd(chip);
u8 *oob = oob_required ? (u8 *)chip->oob_poi : NULL; u8 *oob = oob_required ? (u8 *)chip->oob_poi : NULL;
int ret; int ret;
@@ -1814,17 +1816,18 @@ static int brcmnand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
return ret; return ret;
} }
static int brcmnand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int brcmnand_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return brcmnand_read(mtd, chip, (u64)page << chip->page_shift, return brcmnand_read(mtd, chip, (u64)page << chip->page_shift,
mtd->writesize >> FC_SHIFT, mtd->writesize >> FC_SHIFT,
NULL, (u8 *)chip->oob_poi); NULL, (u8 *)chip->oob_poi);
} }
static int brcmnand_read_oob_raw(struct mtd_info *mtd, struct nand_chip *chip, static int brcmnand_read_oob_raw(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct brcmnand_host *host = nand_get_controller_data(chip); struct brcmnand_host *host = nand_get_controller_data(chip);
brcmnand_set_ecc_enabled(host, 0); brcmnand_set_ecc_enabled(host, 0);

View File

@@ -354,9 +354,10 @@ static int cafe_nand_write_oob(struct mtd_info *mtd,
} }
/* Don't use -- use nand_read_oob_std for now */ /* Don't use -- use nand_read_oob_std for now */
static int cafe_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int cafe_nand_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize); return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
} }
/** /**
@@ -369,9 +370,10 @@ static int cafe_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
* The hw generator calculates the error syndrome automatically. Therefore * The hw generator calculates the error syndrome automatically. Therefore
* we need a special oob layout and handling. * we need a special oob layout and handling.
*/ */
static int cafe_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int cafe_nand_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct cafe_priv *cafe = nand_get_controller_data(chip); struct cafe_priv *cafe = nand_get_controller_data(chip);
unsigned int max_bitflips = 0; unsigned int max_bitflips = 0;

View File

@@ -676,9 +676,10 @@ static void denali_oob_xfer(struct mtd_info *mtd, struct nand_chip *chip,
false); false);
} }
static int denali_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, static int denali_read_page_raw(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct denali_nand_info *denali = mtd_to_denali(mtd); struct denali_nand_info *denali = mtd_to_denali(mtd);
int writesize = mtd->writesize; int writesize = mtd->writesize;
int oobsize = mtd->oobsize; int oobsize = mtd->oobsize;
@@ -751,9 +752,10 @@ static int denali_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
return 0; return 0;
} }
static int denali_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int denali_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
denali_oob_xfer(mtd, chip, page, 0); denali_oob_xfer(mtd, chip, page, 0);
return 0; return 0;
@@ -771,9 +773,10 @@ static int denali_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
return nand_prog_page_end_op(chip); return nand_prog_page_end_op(chip);
} }
static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int denali_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct denali_nand_info *denali = mtd_to_denali(mtd); struct denali_nand_info *denali = mtd_to_denali(mtd);
unsigned long uncor_ecc_flags = 0; unsigned long uncor_ecc_flags = 0;
int stat = 0; int stat = 0;
@@ -792,7 +795,7 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip,
return stat; return stat;
if (uncor_ecc_flags) { if (uncor_ecc_flags) {
ret = denali_read_oob(mtd, chip, page); ret = denali_read_oob(chip, page);
if (ret) if (ret)
return ret; return ret;

View File

@@ -845,21 +845,21 @@ static int read_page(struct mtd_info *mtd, struct nand_chip *nand,
} }
static int docg4_read_page_raw(struct mtd_info *mtd, struct nand_chip *nand, static int docg4_read_page_raw(struct nand_chip *nand, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
return read_page(mtd, nand, buf, page, false); return read_page(nand_to_mtd(nand), nand, buf, page, false);
} }
static int docg4_read_page(struct mtd_info *mtd, struct nand_chip *nand, static int docg4_read_page(struct nand_chip *nand, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
return read_page(mtd, nand, buf, page, true); return read_page(nand_to_mtd(nand), nand, buf, page, true);
} }
static int docg4_read_oob(struct mtd_info *mtd, struct nand_chip *nand, static int docg4_read_oob(struct nand_chip *nand, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(nand);
struct docg4_priv *doc = nand_get_controller_data(nand); struct docg4_priv *doc = nand_get_controller_data(nand);
void __iomem *docptr = doc->virtadr; void __iomem *docptr = doc->virtadr;
uint16_t status; uint16_t status;
@@ -1059,7 +1059,7 @@ static int __init read_factory_bbt(struct mtd_info *mtd)
return -ENOMEM; return -ENOMEM;
read_page_prologue(mtd, g4_addr); read_page_prologue(mtd, g4_addr);
docg4_read_page(mtd, nand, buf, 0, DOCG4_FACTORY_BBT_PAGE); docg4_read_page(nand, buf, 0, DOCG4_FACTORY_BBT_PAGE);
/* /*
* If no memory-based bbt was created, exit. This will happen if module * If no memory-based bbt was created, exit. This will happen if module
@@ -1077,7 +1077,7 @@ static int __init read_factory_bbt(struct mtd_info *mtd)
* It is stored redundantly, so we get another chance. * It is stored redundantly, so we get another chance.
*/ */
eccfailed_stats = mtd->ecc_stats.failed; eccfailed_stats = mtd->ecc_stats.failed;
docg4_read_page(mtd, nand, buf, 0, DOCG4_REDUNDANT_BBT_PAGE); docg4_read_page(nand, buf, 0, DOCG4_REDUNDANT_BBT_PAGE);
if (mtd->ecc_stats.failed > eccfailed_stats) { if (mtd->ecc_stats.failed > eccfailed_stats) {
dev_warn(doc->dev, dev_warn(doc->dev,
"The factory bbt could not be read!\n"); "The factory bbt could not be read!\n");

View File

@@ -710,9 +710,10 @@ static const struct nand_controller_ops fsl_elbc_controller_ops = {
.attach_chip = fsl_elbc_attach_chip, .attach_chip = fsl_elbc_attach_chip,
}; };
static int fsl_elbc_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int fsl_elbc_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); struct fsl_elbc_mtd *priv = nand_get_controller_data(chip);
struct fsl_lbc_ctrl *ctrl = priv->ctrl; struct fsl_lbc_ctrl *ctrl = priv->ctrl;
struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = ctrl->nand; struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = ctrl->nand;

View File

@@ -679,9 +679,10 @@ static int check_erased_page(struct nand_chip *chip, u8 *buf)
return bitflips; return bitflips;
} }
static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int fsl_ifc_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); struct fsl_ifc_mtd *priv = nand_get_controller_data(chip);
struct fsl_ifc_ctrl *ctrl = priv->ctrl; struct fsl_ifc_ctrl *ctrl = priv->ctrl;
struct fsl_ifc_nand_ctrl *nctrl = ifc_nand_ctrl; struct fsl_ifc_nand_ctrl *nctrl = ifc_nand_ctrl;

View File

@@ -707,7 +707,6 @@ static int fsmc_exec_op(struct nand_chip *chip, const struct nand_operation *op,
/* /*
* fsmc_read_page_hwecc * fsmc_read_page_hwecc
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller expects OOB data read to chip->oob_poi * @oob_required: caller expects OOB data read to chip->oob_poi
@@ -719,9 +718,10 @@ static int fsmc_exec_op(struct nand_chip *chip, const struct nand_operation *op,
* After this read, fsmc hardware generates and reports error data bits(up to a * After this read, fsmc hardware generates and reports error data bits(up to a
* max of 8 bits) * max of 8 bits)
*/ */
static int fsmc_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, static int fsmc_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int i, j, s, stat, eccsize = chip->ecc.size; int i, j, s, stat, eccsize = chip->ecc.size;
int eccbytes = chip->ecc.bytes; int eccbytes = chip->ecc.bytes;
int eccsteps = chip->ecc.steps; int eccsteps = chip->ecc.steps;

View File

@@ -1085,8 +1085,8 @@ static int gpmi_ecc_read_page_data(struct nand_chip *chip,
return max_bitflips; return max_bitflips;
} }
static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int gpmi_ecc_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
nand_read_page_op(chip, page, 0, NULL, 0); nand_read_page_op(chip, page, 0, NULL, 0);
@@ -1094,8 +1094,8 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
} }
/* Fake a virtual small page for the subpage read */ /* Fake a virtual small page for the subpage read */
static int gpmi_ecc_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, static int gpmi_ecc_read_subpage(struct nand_chip *chip, uint32_t offs,
uint32_t offs, uint32_t len, uint8_t *buf, int page) uint32_t len, uint8_t *buf, int page)
{ {
struct gpmi_nand_data *this = nand_get_controller_data(chip); struct gpmi_nand_data *this = nand_get_controller_data(chip);
void __iomem *bch_regs = this->resources.bch_regs; void __iomem *bch_regs = this->resources.bch_regs;
@@ -1130,7 +1130,7 @@ static int gpmi_ecc_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
dev_dbg(this->dev, dev_dbg(this->dev,
"page:%d, first:%d, last:%d, marker at:%d\n", "page:%d, first:%d, last:%d, marker at:%d\n",
page, first, last, marker_pos); page, first, last, marker_pos);
return gpmi_ecc_read_page(mtd, chip, buf, 0, page); return gpmi_ecc_read_page(chip, buf, 0, page);
} }
} }
@@ -1324,9 +1324,9 @@ exit_auxiliary:
* ECC-based or raw view of the page is implicit in which function it calls * ECC-based or raw view of the page is implicit in which function it calls
* (there is a similar pair of ECC-based/raw functions for writing). * (there is a similar pair of ECC-based/raw functions for writing).
*/ */
static int gpmi_ecc_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int gpmi_ecc_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct gpmi_nand_data *this = nand_get_controller_data(chip); struct gpmi_nand_data *this = nand_get_controller_data(chip);
dev_dbg(this->dev, "page number is %d\n", page); dev_dbg(this->dev, "page number is %d\n", page);
@@ -1380,10 +1380,10 @@ gpmi_ecc_write_oob(struct mtd_info *mtd, struct nand_chip *chip, int page)
* See set_geometry_by_ecc_info inline comments to have a full description * See set_geometry_by_ecc_info inline comments to have a full description
* of the layout used by the GPMI controller. * of the layout used by the GPMI controller.
*/ */
static int gpmi_ecc_read_page_raw(struct mtd_info *mtd, static int gpmi_ecc_read_page_raw(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct gpmi_nand_data *this = nand_get_controller_data(chip); struct gpmi_nand_data *this = nand_get_controller_data(chip);
struct bch_geometry *nfc_geo = &this->bch_geometry; struct bch_geometry *nfc_geo = &this->bch_geometry;
int eccsize = nfc_geo->ecc_chunk_size; int eccsize = nfc_geo->ecc_chunk_size;
@@ -1536,10 +1536,9 @@ static int gpmi_ecc_write_page_raw(struct mtd_info *mtd,
mtd->writesize + mtd->oobsize); mtd->writesize + mtd->oobsize);
} }
static int gpmi_ecc_read_oob_raw(struct mtd_info *mtd, struct nand_chip *chip, static int gpmi_ecc_read_oob_raw(struct nand_chip *chip, int page)
int page)
{ {
return gpmi_ecc_read_page_raw(mtd, chip, NULL, 1, page); return gpmi_ecc_read_page_raw(chip, NULL, 1, page);
} }
static int gpmi_ecc_write_oob_raw(struct mtd_info *mtd, struct nand_chip *chip, static int gpmi_ecc_write_oob_raw(struct mtd_info *mtd, struct nand_chip *chip,

View File

@@ -528,9 +528,10 @@ static irqreturn_t hinfc_irq_handle(int irq, void *devid)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int hisi_nand_read_page_hwecc(struct mtd_info *mtd, static int hisi_nand_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct hinfc_host *host = nand_get_controller_data(chip); struct hinfc_host *host = nand_get_controller_data(chip);
int max_bitflips = 0, stat = 0, stat_max = 0, status_ecc; int max_bitflips = 0, stat = 0, stat_max = 0, status_ecc;
int stat_1, stat_2; int stat_1, stat_2;
@@ -560,9 +561,9 @@ static int hisi_nand_read_page_hwecc(struct mtd_info *mtd,
return max_bitflips; return max_bitflips;
} }
static int hisi_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int hisi_nand_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct hinfc_host *host = nand_get_controller_data(chip); struct hinfc_host *host = nand_get_controller_data(chip);
nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize); nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);

View File

@@ -442,9 +442,10 @@ out1:
return -ENXIO; return -ENXIO;
} }
static int lpc32xx_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int lpc32xx_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct lpc32xx_nand_host *host = nand_get_controller_data(chip); struct lpc32xx_nand_host *host = nand_get_controller_data(chip);
int i, j; int i, j;
uint8_t *oobbuf = chip->oob_poi; uint8_t *oobbuf = chip->oob_poi;
@@ -557,13 +558,12 @@ static int lpc32xx_write_page_lowlevel(struct mtd_info *mtd,
return nand_prog_page_end_op(chip); return nand_prog_page_end_op(chip);
} }
static int lpc32xx_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int lpc32xx_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct lpc32xx_nand_host *host = nand_get_controller_data(chip); struct lpc32xx_nand_host *host = nand_get_controller_data(chip);
/* Read whole page - necessary with MLC controller! */ /* Read whole page - necessary with MLC controller! */
lpc32xx_read_page(mtd, chip, host->dummy_buf, 1, page); lpc32xx_read_page(chip, host->dummy_buf, 1, page);
return 0; return 0;
} }

View File

@@ -396,9 +396,10 @@ static void lpc32xx_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int
/* /*
* Read the OOB data from the device without ECC using FIFO method * Read the OOB data from the device without ECC using FIFO method
*/ */
static int lpc32xx_nand_read_oob_syndrome(struct mtd_info *mtd, static int lpc32xx_nand_read_oob_syndrome(struct nand_chip *chip, int page)
struct nand_chip *chip, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize); return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
} }
@@ -610,10 +611,10 @@ static int lpc32xx_xfer(struct mtd_info *mtd, uint8_t *buf, int eccsubpages,
* Read the data and OOB data from the device, use ECC correction with the * Read the data and OOB data from the device, use ECC correction with the
* data, disable ECC for the OOB data * data, disable ECC for the OOB data
*/ */
static int lpc32xx_nand_read_page_syndrome(struct mtd_info *mtd, static int lpc32xx_nand_read_page_syndrome(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct lpc32xx_nand_host *host = nand_get_controller_data(chip); struct lpc32xx_nand_host *host = nand_get_controller_data(chip);
struct mtd_oob_region oobregion = { }; struct mtd_oob_region oobregion = { };
int stat, i, status, error; int stat, i, status, error;
@@ -657,11 +658,12 @@ static int lpc32xx_nand_read_page_syndrome(struct mtd_info *mtd,
* Read the data and OOB data from the device, no ECC correction with the * Read the data and OOB data from the device, no ECC correction with the
* data or OOB data * data or OOB data
*/ */
static int lpc32xx_nand_read_page_raw_syndrome(struct mtd_info *mtd, static int lpc32xx_nand_read_page_raw_syndrome(struct nand_chip *chip,
struct nand_chip *chip,
uint8_t *buf, int oob_required, uint8_t *buf, int oob_required,
int page) int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
/* Issue read command */ /* Issue read command */
nand_read_page_op(chip, page, 0, NULL, 0); nand_read_page_op(chip, page, 0, NULL, 0);

View File

@@ -1026,18 +1026,15 @@ static int marvell_nfc_hw_ecc_hmg_do_read_page(struct nand_chip *chip,
return ret; return ret;
} }
static int marvell_nfc_hw_ecc_hmg_read_page_raw(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_hmg_read_page_raw(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
return marvell_nfc_hw_ecc_hmg_do_read_page(chip, buf, chip->oob_poi, return marvell_nfc_hw_ecc_hmg_do_read_page(chip, buf, chip->oob_poi,
true, page); true, page);
} }
static int marvell_nfc_hw_ecc_hmg_read_page(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_hmg_read_page(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, int oob_required, int page)
u8 *buf, int oob_required,
int page)
{ {
const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout; const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout;
unsigned int full_sz = lt->data_bytes + lt->spare_bytes + lt->ecc_bytes; unsigned int full_sz = lt->data_bytes + lt->spare_bytes + lt->ecc_bytes;
@@ -1075,8 +1072,7 @@ static int marvell_nfc_hw_ecc_hmg_read_page(struct mtd_info *mtd,
* it appears before the ECC bytes when reading), the ->read_oob_raw() function * it appears before the ECC bytes when reading), the ->read_oob_raw() function
* also stands for ->read_oob(). * also stands for ->read_oob().
*/ */
static int marvell_nfc_hw_ecc_hmg_read_oob_raw(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_hmg_read_oob_raw(struct nand_chip *chip, int page)
struct nand_chip *chip, int page)
{ {
/* Invalidate page cache */ /* Invalidate page cache */
chip->pagebuf = -1; chip->pagebuf = -1;
@@ -1183,10 +1179,10 @@ static int marvell_nfc_hw_ecc_hmg_write_oob_raw(struct mtd_info *mtd,
} }
/* BCH read helpers */ /* BCH read helpers */
static int marvell_nfc_hw_ecc_bch_read_page_raw(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_bch_read_page_raw(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout; const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout;
u8 *oob = chip->oob_poi; u8 *oob = chip->oob_poi;
int chunk_size = lt->data_bytes + lt->spare_bytes + lt->ecc_bytes; int chunk_size = lt->data_bytes + lt->spare_bytes + lt->ecc_bytes;
@@ -1295,11 +1291,11 @@ static void marvell_nfc_hw_ecc_bch_read_chunk(struct nand_chip *chip, int chunk,
} }
} }
static int marvell_nfc_hw_ecc_bch_read_page(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_bch_read_page(struct nand_chip *chip,
struct nand_chip *chip,
u8 *buf, int oob_required, u8 *buf, int oob_required,
int page) int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout; const struct marvell_hw_ecc_layout *lt = to_marvell_nand(chip)->layout;
int data_len = lt->data_bytes, spare_len = lt->spare_bytes, ecc_len; int data_len = lt->data_bytes, spare_len = lt->spare_bytes, ecc_len;
u8 *data = buf, *spare = chip->oob_poi, *ecc; u8 *data = buf, *spare = chip->oob_poi, *ecc;
@@ -1392,22 +1388,20 @@ static int marvell_nfc_hw_ecc_bch_read_page(struct mtd_info *mtd,
return max_bitflips; return max_bitflips;
} }
static int marvell_nfc_hw_ecc_bch_read_oob_raw(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_bch_read_oob_raw(struct nand_chip *chip, int page)
struct nand_chip *chip, int page)
{ {
/* Invalidate page cache */ /* Invalidate page cache */
chip->pagebuf = -1; chip->pagebuf = -1;
return chip->ecc.read_page_raw(mtd, chip, chip->data_buf, true, page); return chip->ecc.read_page_raw(chip, chip->data_buf, true, page);
} }
static int marvell_nfc_hw_ecc_bch_read_oob(struct mtd_info *mtd, static int marvell_nfc_hw_ecc_bch_read_oob(struct nand_chip *chip, int page)
struct nand_chip *chip, int page)
{ {
/* Invalidate page cache */ /* Invalidate page cache */
chip->pagebuf = -1; chip->pagebuf = -1;
return chip->ecc.read_page(mtd, chip, chip->data_buf, true, page); return chip->ecc.read_page(chip, chip->data_buf, true, page);
} }
/* BCH write helpers */ /* BCH write helpers */

View File

@@ -969,23 +969,25 @@ done:
return bitflips; return bitflips;
} }
static int mtk_nfc_read_subpage_hwecc(struct mtd_info *mtd, static int mtk_nfc_read_subpage_hwecc(struct nand_chip *chip, u32 off,
struct nand_chip *chip, u32 off,
u32 len, u8 *p, int pg) u32 len, u8 *p, int pg)
{ {
return mtk_nfc_read_subpage(mtd, chip, off, len, p, pg, 0); return mtk_nfc_read_subpage(nand_to_mtd(chip), chip, off, len, p, pg,
0);
} }
static int mtk_nfc_read_page_hwecc(struct mtd_info *mtd, static int mtk_nfc_read_page_hwecc(struct nand_chip *chip, u8 *p, int oob_on,
struct nand_chip *chip, u8 *p, int pg)
int oob_on, int pg)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return mtk_nfc_read_subpage(mtd, chip, 0, mtd->writesize, p, pg, 0); return mtk_nfc_read_subpage(mtd, chip, 0, mtd->writesize, p, pg, 0);
} }
static int mtk_nfc_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, static int mtk_nfc_read_page_raw(struct nand_chip *chip, u8 *buf, int oob_on,
u8 *buf, int oob_on, int page) int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct mtk_nfc_nand_chip *mtk_nand = to_mtk_nand(chip); struct mtk_nfc_nand_chip *mtk_nand = to_mtk_nand(chip);
struct mtk_nfc *nfc = nand_get_controller_data(chip); struct mtk_nfc *nfc = nand_get_controller_data(chip);
struct mtk_nfc_fdm *fdm = &mtk_nand->fdm; struct mtk_nfc_fdm *fdm = &mtk_nand->fdm;
@@ -1011,10 +1013,9 @@ static int mtk_nfc_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
return ret; return ret;
} }
static int mtk_nfc_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, static int mtk_nfc_read_oob_std(struct nand_chip *chip, int page)
int page)
{ {
return mtk_nfc_read_page_raw(mtd, chip, NULL, 1, page); return mtk_nfc_read_page_raw(chip, NULL, 1, page);
} }
static inline void mtk_nfc_hw_init(struct mtk_nfc *nfc) static inline void mtk_nfc_hw_init(struct mtk_nfc *nfc)

View File

@@ -816,8 +816,8 @@ static int mxc_nand_read_page_v2_v3(struct nand_chip *chip, void *buf,
return max_bitflips; return max_bitflips;
} }
static int mxc_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int mxc_nand_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mxc_nand_host *host = nand_get_controller_data(chip); struct mxc_nand_host *host = nand_get_controller_data(chip);
void *oob_buf; void *oob_buf;
@@ -830,8 +830,8 @@ static int mxc_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip,
return host->devtype_data->read_page(chip, buf, oob_buf, 1, page); return host->devtype_data->read_page(chip, buf, oob_buf, 1, page);
} }
static int mxc_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, static int mxc_nand_read_page_raw(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mxc_nand_host *host = nand_get_controller_data(chip); struct mxc_nand_host *host = nand_get_controller_data(chip);
void *oob_buf; void *oob_buf;
@@ -844,8 +844,7 @@ static int mxc_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
return host->devtype_data->read_page(chip, buf, oob_buf, 0, page); return host->devtype_data->read_page(chip, buf, oob_buf, 0, page);
} }
static int mxc_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int mxc_nand_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mxc_nand_host *host = nand_get_controller_data(chip); struct mxc_nand_host *host = nand_get_controller_data(chip);

View File

@@ -427,7 +427,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs)
page_end = page + (chip->bbt_options & NAND_BBT_SCAN2NDPAGE ? 2 : 1); page_end = page + (chip->bbt_options & NAND_BBT_SCAN2NDPAGE ? 2 : 1);
for (; page < page_end; page++) { for (; page < page_end; page++) {
res = chip->ecc.read_oob(mtd, chip, page); res = chip->ecc.read_oob(chip, page);
if (res < 0) if (res < 0)
return res; return res;
@@ -2978,7 +2978,6 @@ EXPORT_SYMBOL(nand_check_erased_ecc_chunk);
/** /**
* nand_read_page_raw_notsupp - dummy read raw page function * nand_read_page_raw_notsupp - dummy read raw page function
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -2986,8 +2985,8 @@ EXPORT_SYMBOL(nand_check_erased_ecc_chunk);
* *
* Returns -ENOTSUPP unconditionally. * Returns -ENOTSUPP unconditionally.
*/ */
int nand_read_page_raw_notsupp(struct mtd_info *mtd, struct nand_chip *chip, int nand_read_page_raw_notsupp(struct nand_chip *chip, u8 *buf,
u8 *buf, int oob_required, int page) int oob_required, int page)
{ {
return -ENOTSUPP; return -ENOTSUPP;
} }
@@ -2995,7 +2994,6 @@ EXPORT_SYMBOL(nand_read_page_raw_notsupp);
/** /**
* nand_read_page_raw - [INTERN] read raw page data without ecc * nand_read_page_raw - [INTERN] read raw page data without ecc
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -3003,9 +3001,10 @@ EXPORT_SYMBOL(nand_read_page_raw_notsupp);
* *
* Not for syndrome calculating ECC controllers, which use a special oob layout. * Not for syndrome calculating ECC controllers, which use a special oob layout.
*/ */
int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, int nand_read_page_raw(struct nand_chip *chip, uint8_t *buf, int oob_required,
uint8_t *buf, int oob_required, int page) int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int ret; int ret;
ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize); ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize);
@@ -3025,7 +3024,6 @@ EXPORT_SYMBOL(nand_read_page_raw);
/** /**
* nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -3033,10 +3031,10 @@ EXPORT_SYMBOL(nand_read_page_raw);
* *
* We need a special oob layout and handling even when OOB isn't used. * We need a special oob layout and handling even when OOB isn't used.
*/ */
static int nand_read_page_raw_syndrome(struct mtd_info *mtd, static int nand_read_page_raw_syndrome(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int eccsize = chip->ecc.size; int eccsize = chip->ecc.size;
int eccbytes = chip->ecc.bytes; int eccbytes = chip->ecc.bytes;
uint8_t *oob = chip->oob_poi; uint8_t *oob = chip->oob_poi;
@@ -3090,15 +3088,15 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
/** /**
* nand_read_page_swecc - [REPLACEABLE] software ECC based page read function * nand_read_page_swecc - [REPLACEABLE] software ECC based page read function
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
* @page: page number to read * @page: page number to read
*/ */
static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip, static int nand_read_page_swecc(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int i, eccsize = chip->ecc.size, ret; int i, eccsize = chip->ecc.size, ret;
int eccbytes = chip->ecc.bytes; int eccbytes = chip->ecc.bytes;
int eccsteps = chip->ecc.steps; int eccsteps = chip->ecc.steps;
@@ -3107,7 +3105,7 @@ static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
uint8_t *ecc_code = chip->ecc.code_buf; uint8_t *ecc_code = chip->ecc.code_buf;
unsigned int max_bitflips = 0; unsigned int max_bitflips = 0;
chip->ecc.read_page_raw(mtd, chip, buf, 1, page); chip->ecc.read_page_raw(chip, buf, 1, page);
for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
chip->ecc.calculate(chip, p, &ecc_calc[i]); chip->ecc.calculate(chip, p, &ecc_calc[i]);
@@ -3136,17 +3134,16 @@ static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
/** /**
* nand_read_subpage - [REPLACEABLE] ECC based sub-page read function * nand_read_subpage - [REPLACEABLE] ECC based sub-page read function
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @data_offs: offset of requested data within the page * @data_offs: offset of requested data within the page
* @readlen: data length * @readlen: data length
* @bufpoi: buffer to store read data * @bufpoi: buffer to store read data
* @page: page number to read * @page: page number to read
*/ */
static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip, static int nand_read_subpage(struct nand_chip *chip, uint32_t data_offs,
uint32_t data_offs, uint32_t readlen, uint8_t *bufpoi, uint32_t readlen, uint8_t *bufpoi, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int start_step, end_step, num_steps, ret; int start_step, end_step, num_steps, ret;
uint8_t *p; uint8_t *p;
int data_col_addr, i, gaps = 0; int data_col_addr, i, gaps = 0;
@@ -3248,7 +3245,6 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
/** /**
* nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -3256,9 +3252,10 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
* *
* Not for syndrome calculating ECC controllers which need a special oob layout. * 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, static int nand_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int i, eccsize = chip->ecc.size, ret; int i, eccsize = chip->ecc.size, ret;
int eccbytes = chip->ecc.bytes; int eccbytes = chip->ecc.bytes;
int eccsteps = chip->ecc.steps; int eccsteps = chip->ecc.steps;
@@ -3318,7 +3315,6 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
/** /**
* nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -3330,9 +3326,10 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
* multiple ECC steps, follows the "infix ECC" scheme and reads/writes ECC from * multiple ECC steps, follows the "infix ECC" scheme and reads/writes ECC from
* the data area, by overwriting the NAND manufacturer bad block markings. * the data area, by overwriting the NAND manufacturer bad block markings.
*/ */
static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd, static int nand_read_page_hwecc_oob_first(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int i, eccsize = chip->ecc.size, ret; int i, eccsize = chip->ecc.size, ret;
int eccbytes = chip->ecc.bytes; int eccbytes = chip->ecc.bytes;
int eccsteps = chip->ecc.steps; int eccsteps = chip->ecc.steps;
@@ -3388,7 +3385,6 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
/** /**
* nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -3397,9 +3393,10 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
* The hw generator calculates the error syndrome automatically. Therefore we * The hw generator calculates the error syndrome automatically. Therefore we
* need a special oob layout and handling. * need a special oob layout and handling.
*/ */
static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip, static int nand_read_page_syndrome(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int ret, i, eccsize = chip->ecc.size; int ret, i, eccsize = chip->ecc.size;
int eccbytes = chip->ecc.bytes; int eccbytes = chip->ecc.bytes;
int eccsteps = chip->ecc.steps; int eccsteps = chip->ecc.steps;
@@ -3610,16 +3607,15 @@ read_retry:
* the read methods return max bitflips per ecc step. * the read methods return max bitflips per ecc step.
*/ */
if (unlikely(ops->mode == MTD_OPS_RAW)) if (unlikely(ops->mode == MTD_OPS_RAW))
ret = chip->ecc.read_page_raw(mtd, chip, bufpoi, ret = chip->ecc.read_page_raw(chip, bufpoi,
oob_required, oob_required,
page); page);
else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) && else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
!oob) !oob)
ret = chip->ecc.read_subpage(mtd, chip, ret = chip->ecc.read_subpage(chip, col, bytes,
col, bytes, bufpoi, bufpoi, page);
page);
else else
ret = chip->ecc.read_page(mtd, chip, bufpoi, ret = chip->ecc.read_page(chip, bufpoi,
oob_required, page); oob_required, page);
if (ret < 0) { if (ret < 0) {
if (use_bufpoi) if (use_bufpoi)
@@ -3723,12 +3719,13 @@ read_retry:
/** /**
* nand_read_oob_std - [REPLACEABLE] the most common OOB data read function * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @page: page number to read * @page: page number to read
*/ */
int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, int page) int nand_read_oob_std(struct nand_chip *chip, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize); return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
} }
EXPORT_SYMBOL(nand_read_oob_std); EXPORT_SYMBOL(nand_read_oob_std);
@@ -3736,13 +3733,12 @@ EXPORT_SYMBOL(nand_read_oob_std);
/** /**
* nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
* with syndromes * with syndromes
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @page: page number to read * @page: page number to read
*/ */
int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, int nand_read_oob_syndrome(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int length = mtd->oobsize; int length = mtd->oobsize;
int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad; int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
int eccsize = chip->ecc.size; int eccsize = chip->ecc.size;
@@ -3913,9 +3909,9 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
while (1) { while (1) {
if (ops->mode == MTD_OPS_RAW) if (ops->mode == MTD_OPS_RAW)
ret = chip->ecc.read_oob_raw(mtd, chip, page); ret = chip->ecc.read_oob_raw(chip, page);
else else
ret = chip->ecc.read_oob(mtd, chip, page); ret = chip->ecc.read_oob(chip, page);
if (ret < 0) if (ret < 0)
break; break;

View File

@@ -290,10 +290,10 @@ static int micron_nand_on_die_ecc_status_8(struct nand_chip *chip, u8 status)
} }
static int static int
micron_nand_read_page_on_die_ecc(struct mtd_info *mtd, struct nand_chip *chip, micron_nand_read_page_on_die_ecc(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int oob_required, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
u8 status; u8 status;
int ret, max_bitflips = 0; int ret, max_bitflips = 0;

View File

@@ -48,13 +48,13 @@ static int toshiba_nand_benand_eccstatus(struct mtd_info *mtd,
} }
static int static int
toshiba_nand_read_page_benand(struct mtd_info *mtd, toshiba_nand_read_page_benand(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int ret; int ret;
ret = nand_read_page_raw(mtd, chip, buf, oob_required, page); ret = nand_read_page_raw(chip, buf, oob_required, page);
if (ret) if (ret)
return ret; return ret;
@@ -62,10 +62,10 @@ toshiba_nand_read_page_benand(struct mtd_info *mtd,
} }
static int static int
toshiba_nand_read_subpage_benand(struct mtd_info *mtd, toshiba_nand_read_subpage_benand(struct nand_chip *chip, uint32_t data_offs,
struct nand_chip *chip, uint32_t data_offs,
uint32_t readlen, uint8_t *bufpoi, int page) uint32_t readlen, uint8_t *bufpoi, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int ret; int ret;
ret = nand_read_page_op(chip, page, data_offs, ret = nand_read_page_op(chip, page, data_offs,

View File

@@ -1616,7 +1616,6 @@ static int omap_write_subpage_bch(struct mtd_info *mtd,
/** /**
* omap_read_page_bch - BCH ecc based page read function for entire page * omap_read_page_bch - BCH ecc based page read function for entire page
* @mtd: mtd info structure
* @chip: nand chip info structure * @chip: nand chip info structure
* @buf: buffer to store read data * @buf: buffer to store read data
* @oob_required: caller requires OOB data read to chip->oob_poi * @oob_required: caller requires OOB data read to chip->oob_poi
@@ -1629,9 +1628,10 @@ static int omap_write_subpage_bch(struct mtd_info *mtd,
* ecc engine enabled. ecc vector updated after read of OOB data. * ecc engine enabled. ecc vector updated after read of OOB data.
* For non error pages ecc vector reported as zero. * For non error pages ecc vector reported as zero.
*/ */
static int omap_read_page_bch(struct mtd_info *mtd, struct nand_chip *chip, static int omap_read_page_bch(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
uint8_t *ecc_calc = chip->ecc.calc_buf; uint8_t *ecc_calc = chip->ecc.calc_buf;
uint8_t *ecc_code = chip->ecc.code_buf; uint8_t *ecc_code = chip->ecc.code_buf;
int stat, ret; int stat, ret;

View File

@@ -1948,8 +1948,8 @@ static int copy_last_cw(struct qcom_nand_host *host, int page)
} }
/* implements ecc->read_page() */ /* implements ecc->read_page() */
static int qcom_nandc_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int qcom_nandc_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct qcom_nand_host *host = to_qcom_nand_host(chip); struct qcom_nand_host *host = to_qcom_nand_host(chip);
struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip); struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip);
@@ -1965,10 +1965,10 @@ static int qcom_nandc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
} }
/* implements ecc->read_page_raw() */ /* implements ecc->read_page_raw() */
static int qcom_nandc_read_page_raw(struct mtd_info *mtd, static int qcom_nandc_read_page_raw(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct qcom_nand_host *host = to_qcom_nand_host(chip); struct qcom_nand_host *host = to_qcom_nand_host(chip);
struct nand_ecc_ctrl *ecc = &chip->ecc; struct nand_ecc_ctrl *ecc = &chip->ecc;
int cw, ret; int cw, ret;
@@ -1988,8 +1988,7 @@ static int qcom_nandc_read_page_raw(struct mtd_info *mtd,
} }
/* implements ecc->read_oob() */ /* implements ecc->read_oob() */
static int qcom_nandc_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int qcom_nandc_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct qcom_nand_host *host = to_qcom_nand_host(chip); struct qcom_nand_host *host = to_qcom_nand_host(chip);
struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip); struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip);

View File

@@ -521,9 +521,10 @@ exit:
* This is copy of nand_read_oob_std * This is copy of nand_read_oob_std
* nand_read_oob_syndrome assumes we can send column address - we can't * nand_read_oob_syndrome assumes we can send column address - we can't
*/ */
static int r852_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int r852_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize); return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
} }

View File

@@ -611,9 +611,11 @@ static void set_cmd_regs(struct mtd_info *mtd, uint32_t cmd, uint32_t flcmcdr_va
writel(flcmcdr_val, FLCMCDR(flctl)); writel(flcmcdr_val, FLCMCDR(flctl));
} }
static int flctl_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, static int flctl_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
nand_read_page_op(chip, page, 0, buf, mtd->writesize); nand_read_page_op(chip, page, 0, buf, mtd->writesize);
if (oob_required) if (oob_required)
chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);

View File

@@ -1189,10 +1189,10 @@ static void sunxi_nfc_hw_ecc_write_extra_oob(struct mtd_info *mtd,
*cur_off = mtd->oobsize + mtd->writesize; *cur_off = mtd->oobsize + mtd->writesize;
} }
static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd, static int sunxi_nfc_hw_ecc_read_page(struct nand_chip *chip, uint8_t *buf,
struct nand_chip *chip, uint8_t *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct nand_ecc_ctrl *ecc = &chip->ecc; struct nand_ecc_ctrl *ecc = &chip->ecc;
unsigned int max_bitflips = 0; unsigned int max_bitflips = 0;
int ret, i, cur_off = 0; int ret, i, cur_off = 0;
@@ -1227,10 +1227,10 @@ static int sunxi_nfc_hw_ecc_read_page(struct mtd_info *mtd,
return max_bitflips; return max_bitflips;
} }
static int sunxi_nfc_hw_ecc_read_page_dma(struct mtd_info *mtd, static int sunxi_nfc_hw_ecc_read_page_dma(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int ret; int ret;
nand_read_page_op(chip, page, 0, NULL, 0); nand_read_page_op(chip, page, 0, NULL, 0);
@@ -1241,14 +1241,14 @@ static int sunxi_nfc_hw_ecc_read_page_dma(struct mtd_info *mtd,
return ret; return ret;
/* Fallback to PIO mode */ /* Fallback to PIO mode */
return sunxi_nfc_hw_ecc_read_page(mtd, chip, buf, oob_required, page); return sunxi_nfc_hw_ecc_read_page(chip, buf, oob_required, page);
} }
static int sunxi_nfc_hw_ecc_read_subpage(struct mtd_info *mtd, static int sunxi_nfc_hw_ecc_read_subpage(struct nand_chip *chip,
struct nand_chip *chip,
u32 data_offs, u32 readlen, u32 data_offs, u32 readlen,
u8 *bufpoi, int page) u8 *bufpoi, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct nand_ecc_ctrl *ecc = &chip->ecc; struct nand_ecc_ctrl *ecc = &chip->ecc;
int ret, i, cur_off = 0; int ret, i, cur_off = 0;
unsigned int max_bitflips = 0; unsigned int max_bitflips = 0;
@@ -1278,11 +1278,11 @@ static int sunxi_nfc_hw_ecc_read_subpage(struct mtd_info *mtd,
return max_bitflips; return max_bitflips;
} }
static int sunxi_nfc_hw_ecc_read_subpage_dma(struct mtd_info *mtd, static int sunxi_nfc_hw_ecc_read_subpage_dma(struct nand_chip *chip,
struct nand_chip *chip,
u32 data_offs, u32 readlen, u32 data_offs, u32 readlen,
u8 *buf, int page) u8 *buf, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
int nchunks = DIV_ROUND_UP(data_offs + readlen, chip->ecc.size); int nchunks = DIV_ROUND_UP(data_offs + readlen, chip->ecc.size);
int ret; int ret;
@@ -1293,7 +1293,7 @@ static int sunxi_nfc_hw_ecc_read_subpage_dma(struct mtd_info *mtd,
return ret; return ret;
/* Fallback to PIO mode */ /* Fallback to PIO mode */
return sunxi_nfc_hw_ecc_read_subpage(mtd, chip, data_offs, readlen, return sunxi_nfc_hw_ecc_read_subpage(chip, data_offs, readlen,
buf, page); buf, page);
} }
@@ -1428,13 +1428,11 @@ pio_fallback:
return sunxi_nfc_hw_ecc_write_page(mtd, chip, buf, oob_required, page); return sunxi_nfc_hw_ecc_write_page(mtd, chip, buf, oob_required, page);
} }
static int sunxi_nfc_hw_ecc_read_oob(struct mtd_info *mtd, static int sunxi_nfc_hw_ecc_read_oob(struct nand_chip *chip, int page)
struct nand_chip *chip,
int page)
{ {
chip->pagebuf = -1; chip->pagebuf = -1;
return chip->ecc.read_page(mtd, chip, chip->data_buf, 1, page); return chip->ecc.read_page(chip, chip->data_buf, 1, page);
} }
static int sunxi_nfc_hw_ecc_write_oob(struct mtd_info *mtd, static int sunxi_nfc_hw_ecc_write_oob(struct mtd_info *mtd,

View File

@@ -277,14 +277,15 @@ dma_unmap:
return err; return err;
} }
static int tango_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int tango_read_page(struct nand_chip *chip, u8 *buf,
u8 *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct tango_nfc *nfc = to_tango_nfc(chip->controller); struct tango_nfc *nfc = to_tango_nfc(chip->controller);
int err, res, len = mtd->writesize; int err, res, len = mtd->writesize;
if (oob_required) if (oob_required)
chip->ecc.read_oob(mtd, chip, page); chip->ecc.read_oob(chip, page);
err = do_dma(nfc, DMA_FROM_DEVICE, NFC_READ, buf, len, page); err = do_dma(nfc, DMA_FROM_DEVICE, NFC_READ, buf, len, page);
if (err) if (err)
@@ -292,7 +293,7 @@ static int tango_read_page(struct mtd_info *mtd, struct nand_chip *chip,
res = decode_error_report(chip); res = decode_error_report(chip);
if (res < 0) { if (res < 0) {
chip->ecc.read_oob_raw(mtd, chip, page); chip->ecc.read_oob_raw(chip, page);
res = check_erased_page(chip, buf); res = check_erased_page(chip, buf);
} }
@@ -424,8 +425,8 @@ static void raw_write(struct nand_chip *chip, const u8 *buf, const u8 *oob)
aux_write(chip, &oob, ecc_size, &pos); aux_write(chip, &oob, ecc_size, &pos);
} }
static int tango_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, static int tango_read_page_raw(struct nand_chip *chip, u8 *buf,
u8 *buf, int oob_required, int page) int oob_required, int page)
{ {
nand_read_page_op(chip, page, 0, NULL, 0); nand_read_page_op(chip, page, 0, NULL, 0);
raw_read(chip, buf, chip->oob_poi); raw_read(chip, buf, chip->oob_poi);
@@ -440,8 +441,7 @@ static int tango_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
return nand_prog_page_end_op(chip); return nand_prog_page_end_op(chip);
} }
static int tango_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int tango_read_oob(struct nand_chip *chip, int page)
int page)
{ {
nand_read_page_op(chip, page, 0, NULL, 0); nand_read_page_op(chip, page, 0, NULL, 0);
raw_read(chip, NULL, chip->oob_poi); raw_read(chip, NULL, chip->oob_poi);

View File

@@ -615,10 +615,10 @@ err_unmap_dma_page:
return ret; return ret;
} }
static int tegra_nand_read_page_raw(struct mtd_info *mtd, static int tegra_nand_read_page_raw(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
void *oob_buf = oob_required ? chip->oob_poi : NULL; void *oob_buf = oob_required ? chip->oob_poi : NULL;
return tegra_nand_page_xfer(mtd, chip, buf, oob_buf, return tegra_nand_page_xfer(mtd, chip, buf, oob_buf,
@@ -635,9 +635,10 @@ static int tegra_nand_write_page_raw(struct mtd_info *mtd,
mtd->oobsize, page, false); mtd->oobsize, page, false);
} }
static int tegra_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int tegra_nand_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
return tegra_nand_page_xfer(mtd, chip, NULL, chip->oob_poi, return tegra_nand_page_xfer(mtd, chip, NULL, chip->oob_poi,
mtd->oobsize, page, true); mtd->oobsize, page, true);
} }
@@ -649,10 +650,10 @@ static int tegra_nand_write_oob(struct mtd_info *mtd, struct nand_chip *chip,
mtd->oobsize, page, false); mtd->oobsize, page, false);
} }
static int tegra_nand_read_page_hwecc(struct mtd_info *mtd, static int tegra_nand_read_page_hwecc(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller); struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
struct tegra_nand_chip *nand = to_tegra_chip(chip); struct tegra_nand_chip *nand = to_tegra_chip(chip);
void *oob_buf = oob_required ? chip->oob_poi : NULL; void *oob_buf = oob_required ? chip->oob_poi : NULL;
@@ -716,7 +717,7 @@ static int tegra_nand_read_page_hwecc(struct mtd_info *mtd,
* erased or if error correction just failed for all sub- * erased or if error correction just failed for all sub-
* pages. * pages.
*/ */
ret = tegra_nand_read_oob(mtd, chip, page); ret = tegra_nand_read_oob(chip, page);
if (ret < 0) if (ret < 0)
return ret; return ret;

View File

@@ -557,9 +557,10 @@ static void vf610_nfc_fill_row(struct nand_chip *chip, int page, u32 *code,
} }
} }
static int vf610_nfc_read_page(struct mtd_info *mtd, struct nand_chip *chip, static int vf610_nfc_read_page(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct vf610_nfc *nfc = mtd_to_nfc(mtd); struct vf610_nfc *nfc = mtd_to_nfc(mtd);
int trfr_sz = mtd->writesize + mtd->oobsize; int trfr_sz = mtd->writesize + mtd->oobsize;
u32 row = 0, cmd1 = 0, cmd2 = 0, code = 0; u32 row = 0, cmd1 = 0, cmd2 = 0, code = 0;
@@ -643,15 +644,15 @@ static int vf610_nfc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
return 0; return 0;
} }
static int vf610_nfc_read_page_raw(struct mtd_info *mtd, static int vf610_nfc_read_page_raw(struct nand_chip *chip, u8 *buf,
struct nand_chip *chip, u8 *buf,
int oob_required, int page) int oob_required, int page)
{ {
struct mtd_info *mtd = nand_to_mtd(chip);
struct vf610_nfc *nfc = mtd_to_nfc(mtd); struct vf610_nfc *nfc = mtd_to_nfc(mtd);
int ret; int ret;
nfc->data_access = true; nfc->data_access = true;
ret = nand_read_page_raw(mtd, chip, buf, oob_required, page); ret = nand_read_page_raw(chip, buf, oob_required, page);
nfc->data_access = false; nfc->data_access = false;
return ret; return ret;
@@ -677,14 +678,13 @@ static int vf610_nfc_write_page_raw(struct mtd_info *mtd,
return nand_prog_page_end_op(chip); return nand_prog_page_end_op(chip);
} }
static int vf610_nfc_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int vf610_nfc_read_oob(struct nand_chip *chip, int page)
int page)
{ {
struct vf610_nfc *nfc = mtd_to_nfc(mtd); struct vf610_nfc *nfc = mtd_to_nfc(nand_to_mtd(chip));
int ret; int ret;
nfc->data_access = true; nfc->data_access = true;
ret = nand_read_oob_std(mtd, chip, page); ret = nand_read_oob_std(chip, page);
nfc->data_access = false; nfc->data_access = false;
return ret; return ret;

View File

@@ -643,14 +643,15 @@ static int spinand_write_page_hwecc(struct mtd_info *mtd,
return nand_prog_page_op(chip, page, 0, p, eccsize * eccsteps); return nand_prog_page_op(chip, page, 0, p, eccsize * eccsteps);
} }
static int spinand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, static int spinand_read_page_hwecc(struct nand_chip *chip, u8 *buf,
u8 *buf, int oob_required, int page) int oob_required, int page)
{ {
int retval; int retval;
u8 status; u8 status;
u8 *p = buf; u8 *p = buf;
int eccsize = chip->ecc.size; int eccsize = chip->ecc.size;
int eccsteps = chip->ecc.steps; int eccsteps = chip->ecc.steps;
struct mtd_info *mtd = nand_to_mtd(chip);
struct spinand_info *info = nand_get_controller_data(chip); struct spinand_info *info = nand_get_controller_data(chip);
enable_read_hw_ecc = 1; enable_read_hw_ecc = 1;

View File

@@ -652,14 +652,14 @@ struct nand_ecc_ctrl {
uint8_t *ecc_code); uint8_t *ecc_code);
int (*correct)(struct nand_chip *chip, uint8_t *dat, uint8_t *read_ecc, int (*correct)(struct nand_chip *chip, uint8_t *dat, uint8_t *read_ecc,
uint8_t *calc_ecc); uint8_t *calc_ecc);
int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, int (*read_page_raw)(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page); int oob_required, int page);
int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, int (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
const uint8_t *buf, int oob_required, int page); const uint8_t *buf, int oob_required, int page);
int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, int (*read_page)(struct nand_chip *chip, uint8_t *buf,
uint8_t *buf, int oob_required, int page); int oob_required, int page);
int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, int (*read_subpage)(struct nand_chip *chip, uint32_t offs,
uint32_t offs, uint32_t len, uint8_t *buf, int page); uint32_t len, uint8_t *buf, int page);
int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip, int (*write_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
uint32_t offset, uint32_t data_len, uint32_t offset, uint32_t data_len,
const uint8_t *data_buf, int oob_required, int page); const uint8_t *data_buf, int oob_required, int page);
@@ -667,9 +667,8 @@ struct nand_ecc_ctrl {
const uint8_t *buf, int oob_required, int page); const uint8_t *buf, int oob_required, int page);
int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
int page); int page);
int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, int (*read_oob_raw)(struct nand_chip *chip, int page);
int page); int (*read_oob)(struct nand_chip *chip, int page);
int (*read_oob)(struct mtd_info *mtd, struct nand_chip *chip, int page);
int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip, int (*write_oob)(struct mtd_info *mtd, struct nand_chip *chip,
int page); int page);
}; };
@@ -1676,11 +1675,10 @@ int nand_write_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
int page); int page);
/* Default read_oob implementation */ /* Default read_oob implementation */
int nand_read_oob_std(struct mtd_info *mtd, struct nand_chip *chip, int page); int nand_read_oob_std(struct nand_chip *chip, int page);
/* Default read_oob syndrome implementation */ /* Default read_oob syndrome implementation */
int nand_read_oob_syndrome(struct mtd_info *mtd, struct nand_chip *chip, int nand_read_oob_syndrome(struct nand_chip *chip, int page);
int page);
/* Wrapper to use in order for controllers/vendors to GET/SET FEATURES */ /* Wrapper to use in order for controllers/vendors to GET/SET FEATURES */
int nand_get_features(struct nand_chip *chip, int addr, u8 *subfeature_param); int nand_get_features(struct nand_chip *chip, int addr, u8 *subfeature_param);
@@ -1690,10 +1688,10 @@ int nand_get_set_features_notsupp(struct mtd_info *mtd, struct nand_chip *chip,
int addr, u8 *subfeature_param); int addr, u8 *subfeature_param);
/* Default read_page_raw implementation */ /* Default read_page_raw implementation */
int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip, int nand_read_page_raw(struct nand_chip *chip, uint8_t *buf, int oob_required,
uint8_t *buf, int oob_required, int page); int page);
int nand_read_page_raw_notsupp(struct mtd_info *mtd, struct nand_chip *chip, int nand_read_page_raw_notsupp(struct nand_chip *chip, u8 *buf,
u8 *buf, int oob_required, int page); int oob_required, int page);
/* Default write_page_raw implementation */ /* Default write_page_raw implementation */
int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip, int nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,