On Mon, 30 May 2016 13:57:56 -0500 Scott Wood <o...@buserror.net> wrote:
> These functions are part of the Linux 4.6 sync. They are being added > before the main sync patch in order to make it easier to address the > issue across all NAND drivers (many/most of which do not closely track > their Linux counterparts) separately from other merge issues. Some drivers are still directly accessing chip->mtd. Here is a patch fixing those places [1] (not tested). [1] http://code.bulix.org/inu69a-100476 > > Signed-off-by: Scott Wood <o...@buserror.net> > --- > board/esd/common/esd405ep_nand.c | 2 +- > board/freescale/m5329evb/nand.c | 2 +- > board/freescale/m5373evb/nand.c | 2 +- > board/socrates/nand.c | 6 ++-- > board/xes/common/actl_nand.c | 2 +- > cmd/nand.c | 4 +-- > drivers/mtd/nand/am335x_spl_bch.c | 6 ++-- > drivers/mtd/nand/arasan_nfc.c | 19 +++++----- > drivers/mtd/nand/atmel_nand.c | 55 ++++++++++++++-------------- > drivers/mtd/nand/davinci_nand.c | 8 ++--- > drivers/mtd/nand/denali.c | 4 +-- > drivers/mtd/nand/fsl_elbc_nand.c | 33 +++++++++-------- > drivers/mtd/nand/fsl_ifc_nand.c | 43 +++++++++++----------- > drivers/mtd/nand/fsl_upm.c | 22 ++++++------ > drivers/mtd/nand/fsmc_nand.c | 7 ++-- > drivers/mtd/nand/kb9202_nand.c | 2 +- > drivers/mtd/nand/kirkwood_nand.c | 2 +- > drivers/mtd/nand/lpc32xx_nand_mlc.c | 2 -- > drivers/mtd/nand/lpc32xx_nand_slc.c | 2 +- > drivers/mtd/nand/mpc5121_nfc.c | 27 +++++++------- > drivers/mtd/nand/mxc_nand.c | 51 +++++++++++++------------- > drivers/mtd/nand/mxs_nand.c | 46 ++++++++++++------------ > drivers/mtd/nand/mxs_nand_spl.c | 11 +++--- > drivers/mtd/nand/nand.c | 5 ++- > drivers/mtd/nand/nand_base.c | 72 > ++++++++++++++++++------------------- > drivers/mtd/nand/nand_bbt.c | 32 ++++++++--------- > drivers/mtd/nand/nand_bch.c | 4 +-- > drivers/mtd/nand/nand_plat.c | 4 +-- > drivers/mtd/nand/nand_spl_simple.c | 11 +++--- > drivers/mtd/nand/nand_util.c | 8 ++--- > drivers/mtd/nand/ndfc.c | 14 ++++---- > drivers/mtd/nand/omap_gpmc.c | 40 ++++++++++----------- > drivers/mtd/nand/pxa3xx_nand.c | 34 ++++++++++-------- > drivers/mtd/nand/s3c2410_nand.c | 4 +-- > drivers/mtd/nand/tegra_nand.c | 29 ++++++++------- > drivers/mtd/nand/vf610_nfc.c | 8 ++--- > fs/yaffs2/yaffs_uboot_glue.c | 2 +- > include/linux/mtd/nand.h | 20 +++++++++++ > 38 files changed, 328 insertions(+), 317 deletions(-) > > diff --git a/board/esd/common/esd405ep_nand.c > b/board/esd/common/esd405ep_nand.c > index f46936c..51ac10c 100644 > --- a/board/esd/common/esd405ep_nand.c > +++ b/board/esd/common/esd405ep_nand.c > @@ -16,7 +16,7 @@ > */ > static void esd405ep_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned > int ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > if (ctrl & NAND_CTRL_CHANGE) { > if ( ctrl & NAND_CLE ) > out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) | > CONFIG_SYS_NAND_CLE); > diff --git a/board/freescale/m5329evb/nand.c b/board/freescale/m5329evb/nand.c > index 8d88bc0..8849681 100644 > --- a/board/freescale/m5329evb/nand.c > +++ b/board/freescale/m5329evb/nand.c > @@ -24,7 +24,7 @@ DECLARE_GLOBAL_DATA_PTR; > > static void nand_hwcontrol(struct mtd_info *mtdinfo, int cmd, unsigned int > ctrl) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > volatile u16 *nCE = (u16 *) CONFIG_SYS_LATCH_ADDR; > > if (ctrl & NAND_CTRL_CHANGE) { > diff --git a/board/freescale/m5373evb/nand.c b/board/freescale/m5373evb/nand.c > index 92cef2a..a96a599 100644 > --- a/board/freescale/m5373evb/nand.c > +++ b/board/freescale/m5373evb/nand.c > @@ -24,7 +24,7 @@ DECLARE_GLOBAL_DATA_PTR; > > static void nand_hwcontrol(struct mtd_info *mtdinfo, int cmd, unsigned int > ctrl) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > volatile u16 *nCE = (u16 *) CONFIG_SYS_LATCH_ADDR; > > if (ctrl & NAND_CTRL_CHANGE) { > diff --git a/board/socrates/nand.c b/board/socrates/nand.c > index 15e6ea6..a67d812 100644 > --- a/board/socrates/nand.c > +++ b/board/socrates/nand.c > @@ -48,7 +48,7 @@ static void sc_nand_write_byte(struct mtd_info *mtd, u_char > byte) > static void sc_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int > len) > { > int i; > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > for (i = 0; i < len; i++) { > out_be32(this->IO_ADDR_W, > @@ -88,7 +88,7 @@ static u16 sc_nand_read_word(struct mtd_info *mtd) > static void sc_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) > { > int i; > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int val; > > val = (state & FPGA_NAND_ENABLE) | FPGA_NAND_CMD_READ; > @@ -105,7 +105,7 @@ static void sc_nand_read_buf(struct mtd_info *mtd, u_char > *buf, int len) > */ > static int sc_nand_device_ready(struct mtd_info *mtdinfo) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > > if (in_be32(this->IO_ADDR_W) & FPGA_NAND_BUSY) > return 0; /* busy */ > diff --git a/board/xes/common/actl_nand.c b/board/xes/common/actl_nand.c > index bf896fe..d1f3668 100644 > --- a/board/xes/common/actl_nand.c > +++ b/board/xes/common/actl_nand.c > @@ -16,7 +16,7 @@ > */ > static void nand_addr_hwcontrol(struct mtd_info *mtd, int cmd, uint ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > ulong IO_ADDR_W; > > if (ctrl & NAND_CTRL_CHANGE) { > diff --git a/cmd/nand.c b/cmd/nand.c > index f1d5a11..583a18f 100644 > --- a/cmd/nand.c > +++ b/cmd/nand.c > @@ -159,7 +159,7 @@ static void do_nand_status(struct mtd_info *mtd) > ulong off; > int last_status = -1; > > - struct nand_chip *nand_chip = mtd->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > /* check the WP bit */ > nand_chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1); > printf("device is %swrite protected\n", > @@ -285,7 +285,7 @@ usage: > static void nand_print_and_set_info(int idx) > { > struct mtd_info *mtd = nand_info[idx]; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > printf("Device %d: ", idx); > if (chip->numchips > 1) > diff --git a/drivers/mtd/nand/am335x_spl_bch.c > b/drivers/mtd/nand/am335x_spl_bch.c > index 2b6fcda..04d5a80 100644 > --- a/drivers/mtd/nand/am335x_spl_bch.c > +++ b/drivers/mtd/nand/am335x_spl_bch.c > @@ -30,7 +30,7 @@ static struct nand_chip nand_chip; > static int nand_command(int block, int page, uint32_t offs, > u8 cmd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int page_addr = page + block * CONFIG_SYS_NAND_PAGE_COUNT; > void (*hwctrl)(struct mtd_info *mtd, int cmd, > unsigned int ctrl) = this->cmd_ctrl; > @@ -100,7 +100,7 @@ static int nand_command(int block, int page, uint32_t > offs, > > static int nand_is_bad_block(int block) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > nand_command(block, 0, CONFIG_SYS_NAND_BAD_BLOCK_POS, > NAND_CMD_READOOB); > @@ -121,7 +121,7 @@ static int nand_is_bad_block(int block) > > static int nand_read_page(int block, int page, void *dst) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_char ecc_calc[ECCTOTAL]; > u_char ecc_code[ECCTOTAL]; > u_char oob_data[CONFIG_SYS_NAND_OOBSIZE]; > diff --git a/drivers/mtd/nand/arasan_nfc.c b/drivers/mtd/nand/arasan_nfc.c > index 4015399..ef8ae04 100644 > --- a/drivers/mtd/nand/arasan_nfc.c > +++ b/drivers/mtd/nand/arasan_nfc.c > @@ -230,7 +230,7 @@ static void arasan_nand_enable_ecc(void) > static u8 arasan_nand_get_addrcycle(struct mtd_info *mtd) > { > u8 addrcycles; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > switch (curr_cmd->addr_cycles) { > case NAND_ADDR_CYCL_NONE: > @@ -264,7 +264,7 @@ static u8 arasan_nand_get_addrcycle(struct mtd_info *mtd) > > static int arasan_nand_read_page(struct mtd_info *mtd, u8 *buf, u32 size) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u32 reg_val, i, pktsize, pktnum; > u32 *bufptr = (u32 *)buf; > u32 timeout; > @@ -441,7 +441,7 @@ static int arasan_nand_write_page_hwecc(struct mtd_info > *mtd, > u32 size = mtd->writesize; > u32 rdcount = 0; > u8 column_addr_cycles; > - struct arasan_nand_info *nand = chip->priv; > + struct arasan_nand_info *nand = nand_get_controller_data(chip); > > if (chip->ecc_step_ds >= ARASAN_NAND_PKTSIZE_1K) > pktsize = ARASAN_NAND_PKTSIZE_1K; > @@ -944,7 +944,7 @@ static void arasan_nand_read_buf(struct mtd_info *mtd, u8 > *buf, int size) > > static u8 arasan_nand_read_byte(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u32 size; > u8 val; > struct nand_onfi_params *p; > @@ -976,8 +976,8 @@ static void arasan_nand_cmd_function(struct mtd_info > *mtd, unsigned int command, > int column, int page_addr) > { > u32 i, ret = 0; > - struct nand_chip *chip = mtd->priv; > - struct arasan_nand_info *nand = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct arasan_nand_info *nand = nand_get_controller_data(chip); > > curr_cmd = NULL; > writel(ARASAN_NAND_INT_STS_XFR_CMPLT_MASK, > @@ -1033,7 +1033,7 @@ static int arasan_nand_ecc_init(struct mtd_info *mtd) > { > int found = -1; > u32 regval, eccpos_start, i; > - struct nand_chip *nand_chip = mtd->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > > nand_chip->ecc.mode = NAND_ECC_HW; > nand_chip->ecc.hwctl = NULL; > @@ -1101,9 +1101,8 @@ static int arasan_nand_init(struct nand_chip > *nand_chip, int devnum) > } > > nand->nand_base = arasan_nand_base; > - mtd = &nand_chip->mtd; > - nand_chip->priv = nand; > - mtd->priv = nand_chip; > + mtd = nand_to_mtd(nand_chip); > + nand_set_controller_data(nand_chip, nand); > > /* Set the driver entry points for MTD */ > nand_chip->cmdfunc = arasan_nand_cmd_function; > diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c > index 9c2cb44..b1adff0 100644 > --- a/drivers/mtd/nand/atmel_nand.c > +++ b/drivers/mtd/nand/atmel_nand.c > @@ -160,8 +160,8 @@ static int pmecc_data_alloc(struct atmel_nand_host *host) > > static void pmecc_gen_syndrome(struct mtd_info *mtd, int sector) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > int i; > uint32_t value; > > @@ -177,8 +177,8 @@ static void pmecc_gen_syndrome(struct mtd_info *mtd, int > sector) > > static void pmecc_substitute(struct mtd_info *mtd) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > int16_t __iomem *alpha_to = host->pmecc_alpha_to; > int16_t __iomem *index_of = host->pmecc_index_of; > int16_t *partial_syn = host->pmecc_partial_syn; > @@ -227,8 +227,8 @@ static void pmecc_substitute(struct mtd_info *mtd) > */ > static void pmecc_get_sigma(struct mtd_info *mtd) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > > int16_t *lmu = host->pmecc_lmu; > int16_t *si = host->pmecc_si; > @@ -383,8 +383,8 @@ static void pmecc_get_sigma(struct mtd_info *mtd) > > static int pmecc_err_location(struct mtd_info *mtd) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > const int cap = host->pmecc_corr_cap; > const int num = 2 * cap + 1; > int sector_size = host->pmecc_sector_size; > @@ -437,8 +437,8 @@ static int pmecc_err_location(struct mtd_info *mtd) > static void pmecc_correct_data(struct mtd_info *mtd, uint8_t *buf, uint8_t > *ecc, > int sector_num, int extra_bytes, int err_nbr) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > int i = 0; > int byte_pos, bit_pos, sector_size, pos; > uint32_t tmp; > @@ -483,8 +483,8 @@ static void pmecc_correct_data(struct mtd_info *mtd, > uint8_t *buf, uint8_t *ecc, > static int pmecc_correction(struct mtd_info *mtd, u32 pmecc_stat, uint8_t > *buf, > u8 *ecc) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > int i, err_nbr, eccbytes; > uint8_t *buf_pos; > > @@ -529,7 +529,7 @@ normal_check: > static int atmel_nand_pmecc_read_page(struct mtd_info *mtd, > struct nand_chip *chip, uint8_t *buf, int oob_required, int page) > { > - struct atmel_nand_host *host = chip->priv; > + struct atmel_nand_host *host = nand_get_controller_data(chip); > int eccsize = chip->ecc.size; > uint8_t *oob = chip->oob_poi; > uint32_t *eccpos = chip->ecc.layout->eccpos; > @@ -571,7 +571,7 @@ static int atmel_nand_pmecc_write_page(struct mtd_info > *mtd, > struct nand_chip *chip, const uint8_t *buf, > int oob_required) > { > - struct atmel_nand_host *host = chip->priv; > + struct atmel_nand_host *host = nand_get_controller_data(chip); > uint32_t *eccpos = chip->ecc.layout->eccpos; > int i, j; > int timeout = PMECC_MAX_TIMEOUT_US; > @@ -615,8 +615,8 @@ out: > > static void atmel_pmecc_core_init(struct mtd_info *mtd) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct atmel_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct atmel_nand_host *host = nand_get_controller_data(nand_chip); > uint32_t val = 0; > struct nand_ecclayout *ecc_layout; > > @@ -808,7 +808,8 @@ static int atmel_pmecc_nand_init_params(struct nand_chip > *nand, > struct atmel_nand_host *host; > int cap, sector_size; > > - host = nand->priv = &pmecc_host; > + host = &pmecc_host; > + nand_set_controller_data(nand, host); > > nand->ecc.mode = NAND_ECC_HW; > nand->ecc.calculate = NULL; > @@ -1080,7 +1081,7 @@ static int atmel_nand_read_page(struct mtd_info *mtd, > struct nand_chip *chip, > static int atmel_nand_correct(struct mtd_info *mtd, u_char *dat, > u_char *read_ecc, u_char *isnull) > { > - struct nand_chip *nand_chip = mtd->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > unsigned int ecc_status; > unsigned int ecc_word, ecc_bit; > > @@ -1207,7 +1208,7 @@ int atmel_hwecc_nand_init_param(struct nand_chip *nand, > struct mtd_info *mtd) > static void at91_nand_hwcontrol(struct mtd_info *mtd, > int cmd, unsigned int ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > if (ctrl & NAND_CTRL_CHANGE) { > ulong IO_ADDR_W = (ulong) this->IO_ADDR_W; > @@ -1243,7 +1244,7 @@ static struct nand_chip nand_chip; > > static int nand_command(int block, int page, uint32_t offs, u8 cmd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int page_addr = page + block * CONFIG_SYS_NAND_PAGE_COUNT; > void (*hwctrl)(struct mtd_info *mtd, int cmd, > unsigned int ctrl) = this->cmd_ctrl; > @@ -1281,7 +1282,7 @@ static int nand_command(int block, int page, uint32_t > offs, u8 cmd) > > static int nand_is_bad_block(int block) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > nand_command(block, 0, CONFIG_SYS_NAND_BAD_BLOCK_POS, NAND_CMD_READOOB); > > @@ -1304,7 +1305,7 @@ static int nand_ecc_pos[] = CONFIG_SYS_NAND_ECCPOS; > > static int nand_read_page(int block, int page, void *dst) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_char ecc_calc[ECCTOTAL]; > u_char ecc_code[ECCTOTAL]; > u_char oob_data[CONFIG_SYS_NAND_OOBSIZE]; > @@ -1337,7 +1338,7 @@ static int nand_read_page(int block, int page, void > *dst) > > int spl_nand_erase_one(int block, int page) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > void (*hwctrl)(struct mtd_info *mtd, int cmd, > unsigned int ctrl) = this->cmd_ctrl; > int page_addr; > @@ -1368,7 +1369,7 @@ int spl_nand_erase_one(int block, int page) > #else > static int nand_read_page(int block, int page, void *dst) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > nand_command(block, page, 0, NAND_CMD_READ0); > atmel_nand_pmecc_read_page(mtd, this, dst, 0, page); > @@ -1407,7 +1408,7 @@ int nand_spl_load_image(uint32_t offs, unsigned int > size, void *dst) > > int at91_nand_wait_ready(struct mtd_info *mtd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > udelay(this->chip_delay); > > @@ -1450,7 +1451,6 @@ void nand_init(void) > mtd = &nand_chip.mtd; > mtd->writesize = CONFIG_SYS_NAND_PAGE_SIZE; > mtd->oobsize = CONFIG_SYS_NAND_OOBSIZE; > - mtd->priv = &nand_chip; > nand_chip.IO_ADDR_R = (void __iomem *)CONFIG_SYS_NAND_BASE; > nand_chip.IO_ADDR_W = (void __iomem *)CONFIG_SYS_NAND_BASE; > board_nand_init(&nand_chip); > @@ -1484,9 +1484,8 @@ int atmel_nand_chip_init(int devnum, ulong base_addr) > { > int ret; > struct nand_chip *nand = &nand_chip[devnum]; > - struct mtd_info *mtd = &nand->mtd; > + struct mtd_info *mtd = nand_to_mtd(nand); > > - mtd->priv = nand; > nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)base_addr; > > #ifdef CONFIG_NAND_ECC_BCH > diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c > index a397074..5e0c7bf 100644 > --- a/drivers/mtd/nand/davinci_nand.c > +++ b/drivers/mtd/nand/davinci_nand.c > @@ -54,7 +54,7 @@ > */ > static void nand_davinci_read_buf(struct mtd_info *mtd, uint8_t *buf, int > len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > const u32 *nand = chip->IO_ADDR_R; > > /* Make sure that buf is 32 bit aligned */ > @@ -99,7 +99,7 @@ static void nand_davinci_read_buf(struct mtd_info *mtd, > uint8_t *buf, int len) > static void nand_davinci_write_buf(struct mtd_info *mtd, const uint8_t *buf, > int len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > const u32 *nand = chip->IO_ADDR_W; > > /* Make sure that buf is 32 bit aligned */ > @@ -144,7 +144,7 @@ static void nand_davinci_write_buf(struct mtd_info *mtd, > const uint8_t *buf, > static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, > unsigned int ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_int32_t IO_ADDR_W = (u_int32_t)this->IO_ADDR_W; > > if (ctrl & NAND_CTRL_CHANGE) { > @@ -223,7 +223,7 @@ static int nand_davinci_calculate_ecc(struct mtd_info > *mtd, const u_char *dat, > static int nand_davinci_correct_data(struct mtd_info *mtd, u_char *dat, > u_char *read_ecc, u_char *calc_ecc) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_int32_t ecc_nand = read_ecc[0] | (read_ecc[1] << 8) | > (read_ecc[2] << 16); > u_int32_t ecc_calc = calc_ecc[0] | (calc_ecc[1] << 8) | > diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c > index 13d10ae..d9bcd72 100644 > --- a/drivers/mtd/nand/denali.c > +++ b/drivers/mtd/nand/denali.c > @@ -48,7 +48,8 @@ static int onfi_timing_mode = NAND_DEFAULT_TIMINGS; > * this macro allows us to convert from an MTD structure to our own > * device context (denali) structure. > */ > -#define mtd_to_denali(m) container_of(m->priv, struct denali_nand_info, nand) > +#define mtd_to_denali(m) \ > + container_of(mtd_to_nand(m), struct denali_nand_info, nand) > > /* > * These constants are defined by the driver to enable common driver > @@ -1179,7 +1180,6 @@ static int denali_init(struct denali_nand_info *denali) > > denali->mtd->name = "denali-nand"; > denali->mtd->owner = THIS_MODULE; > - denali->mtd->priv = &denali->nand; > > /* register the driver with the NAND core subsystem */ > denali->nand.select_chip = denali_select_chip; > diff --git a/drivers/mtd/nand/fsl_elbc_nand.c > b/drivers/mtd/nand/fsl_elbc_nand.c > index 523aee3..aafff67 100644 > --- a/drivers/mtd/nand/fsl_elbc_nand.c > +++ b/drivers/mtd/nand/fsl_elbc_nand.c > @@ -154,8 +154,8 @@ static struct nand_bbt_descr bbt_mirror_descr = { > */ > static void set_addr(struct mtd_info *mtd, int column, int page_addr, int > oob) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_elbc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > fsl_lbc_t *lbc = ctrl->regs; > int buf_num; > @@ -194,8 +194,8 @@ static void set_addr(struct mtd_info *mtd, int column, > int page_addr, int oob) > */ > static int fsl_elbc_run_command(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_elbc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > fsl_lbc_t *lbc = ctrl->regs; > u32 timeo = (CONFIG_SYS_HZ * 10) / 1000; > @@ -246,7 +246,7 @@ static int fsl_elbc_run_command(struct mtd_info *mtd) > > static void fsl_elbc_do_read(struct nand_chip *chip, int oob) > { > - struct fsl_elbc_mtd *priv = chip->priv; > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > fsl_lbc_t *lbc = ctrl->regs; > > @@ -279,8 +279,8 @@ static void fsl_elbc_do_read(struct nand_chip *chip, int > oob) > static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command, > int column, int page_addr) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_elbc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > fsl_lbc_t *lbc = ctrl->regs; > > @@ -489,8 +489,8 @@ static void fsl_elbc_select_chip(struct mtd_info *mtd, > int chip) > */ > static void fsl_elbc_write_buf(struct mtd_info *mtd, const u8 *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_elbc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > unsigned int bufsize = mtd->writesize + mtd->oobsize; > > @@ -526,8 +526,8 @@ static void fsl_elbc_write_buf(struct mtd_info *mtd, > const u8 *buf, int len) > */ > static u8 fsl_elbc_read_byte(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_elbc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > > /* If there are still bytes in the FCM, then use the next byte. */ > @@ -543,8 +543,8 @@ static u8 fsl_elbc_read_byte(struct mtd_info *mtd) > */ > static void fsl_elbc_read_buf(struct mtd_info *mtd, u8 *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_elbc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > int avail; > > @@ -566,7 +566,7 @@ static void fsl_elbc_read_buf(struct mtd_info *mtd, u8 > *buf, int len) > */ > static int fsl_elbc_wait(struct mtd_info *mtd, struct nand_chip *chip) > { > - struct fsl_elbc_mtd *priv = chip->priv; > + struct fsl_elbc_mtd *priv = nand_get_controller_data(chip); > struct fsl_elbc_ctrl *ctrl = priv->ctrl; > fsl_lbc_t *lbc = ctrl->regs; > > @@ -697,8 +697,7 @@ static int fsl_elbc_chip_init(int devnum, u8 *addr) > } > > nand = &priv->chip; > - mtd = &nand->mtd; > - mtd->priv = nand; > + mtd = nand_to_mtd(nand); > > elbc_ctrl->chips[priv->bank] = priv; > > @@ -720,7 +719,7 @@ static int fsl_elbc_chip_init(int devnum, u8 *addr) > nand->bbt_options = NAND_BBT_USE_FLASH; > > nand->controller = &elbc_ctrl->controller; > - nand->priv = priv; > + nand_set_controller_data(nand, priv); > > nand->ecc.read_page = fsl_elbc_read_page; > nand->ecc.write_page = fsl_elbc_write_page; > diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c > index d5fd3ee..f28602e 100644 > --- a/drivers/mtd/nand/fsl_ifc_nand.c > +++ b/drivers/mtd/nand/fsl_ifc_nand.c > @@ -222,8 +222,8 @@ static struct nand_bbt_descr bbt_mirror_descr = { > */ > static void set_addr(struct mtd_info *mtd, int column, int page_addr, int > oob) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > struct fsl_ifc_runtime *ifc = ctrl->regs.rregs; > int buf_num; > @@ -247,8 +247,8 @@ static void set_addr(struct mtd_info *mtd, int column, > int page_addr, int oob) > static int is_blank(struct mtd_info *mtd, struct fsl_ifc_ctrl *ctrl, > unsigned int bufnum) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > u8 __iomem *addr = priv->vbase + bufnum * (mtd->writesize * 2); > u32 __iomem *main = (u32 *)addr; > u8 __iomem *oob = addr + mtd->writesize; > @@ -286,8 +286,8 @@ static int check_read_ecc(struct mtd_info *mtd, struct > fsl_ifc_ctrl *ctrl, > */ > static int fsl_ifc_run_command(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > struct fsl_ifc_runtime *ifc = ctrl->regs.rregs; > u32 timeo = (CONFIG_SYS_HZ * 10) / 1000; > @@ -367,7 +367,7 @@ static void fsl_ifc_do_read(struct nand_chip *chip, > int oob, > struct mtd_info *mtd) > { > - struct fsl_ifc_mtd *priv = chip->priv; > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > struct fsl_ifc_runtime *ifc = ctrl->regs.rregs; > > @@ -404,8 +404,8 @@ static void fsl_ifc_do_read(struct nand_chip *chip, > static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command, > int column, int page_addr) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > struct fsl_ifc_runtime *ifc = ctrl->regs.rregs; > > @@ -607,8 +607,8 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, > unsigned int command, > */ > static void fsl_ifc_write_buf(struct mtd_info *mtd, const u8 *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > unsigned int bufsize = mtd->writesize + mtd->oobsize; > > @@ -635,8 +635,8 @@ static void fsl_ifc_write_buf(struct mtd_info *mtd, const > u8 *buf, int len) > */ > static u8 fsl_ifc_read_byte(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > unsigned int offset; > > @@ -659,8 +659,8 @@ static u8 fsl_ifc_read_byte(struct mtd_info *mtd) > */ > static uint8_t fsl_ifc_read_byte16(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > uint16_t data; > > @@ -683,8 +683,8 @@ static uint8_t fsl_ifc_read_byte16(struct mtd_info *mtd) > */ > static void fsl_ifc_read_buf(struct mtd_info *mtd, u8 *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_ifc_mtd *priv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > int avail; > > @@ -706,7 +706,7 @@ static void fsl_ifc_read_buf(struct mtd_info *mtd, u8 > *buf, int len) > */ > static int fsl_ifc_wait(struct mtd_info *mtd, struct nand_chip *chip) > { > - struct fsl_ifc_mtd *priv = chip->priv; > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > struct fsl_ifc_runtime *ifc = ctrl->regs.rregs; > u32 nand_fsr; > @@ -739,7 +739,7 @@ static int fsl_ifc_wait(struct mtd_info *mtd, struct > nand_chip *chip) > static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip, > uint8_t *buf, int oob_required, int page) > { > - struct fsl_ifc_mtd *priv = chip->priv; > + struct fsl_ifc_mtd *priv = nand_get_controller_data(chip); > struct fsl_ifc_ctrl *ctrl = priv->ctrl; > > fsl_ifc_read_buf(mtd, buf, mtd->writesize); > @@ -925,8 +925,7 @@ static int fsl_ifc_chip_init(int devnum, u8 *addr) > } > > nand = &priv->chip; > - mtd = &nand->mtd; > - mtd->priv = nand; > + mtd = nand_to_mtd(nand); > > ifc_ctrl->chips[priv->bank] = priv; > > @@ -955,7 +954,7 @@ static int fsl_ifc_chip_init(int devnum, u8 *addr) > } > > nand->controller = &ifc_ctrl->controller; > - nand->priv = priv; > + nand_set_controller_data(nand, priv); > > nand->ecc.read_page = fsl_ifc_read_page; > nand->ecc.write_page = fsl_ifc_write_page; > diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c > index 5426c32..d2b3881 100644 > --- a/drivers/mtd/nand/fsl_upm.c > +++ b/drivers/mtd/nand/fsl_upm.c > @@ -64,8 +64,8 @@ static void fun_wait(struct fsl_upm_nand *fun) > #if CONFIG_SYS_NAND_MAX_CHIPS > 1 > static void fun_select_chip(struct mtd_info *mtd, int chip_nr) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_upm_nand *fun = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_upm_nand *fun = nand_get_controller_data(chip); > > if (chip_nr >= 0) { > fun->chip_nr = chip_nr; > @@ -79,8 +79,8 @@ static void fun_select_chip(struct mtd_info *mtd, int > chip_nr) > > static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_upm_nand *fun = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_upm_nand *fun = nand_get_controller_data(chip); > void __iomem *io_addr; > u32 mar; > > @@ -123,7 +123,7 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, > unsigned int ctrl) > > static u8 upm_nand_read_byte(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > return in_8(chip->IO_ADDR_R); > } > @@ -131,8 +131,8 @@ static u8 upm_nand_read_byte(struct mtd_info *mtd) > static void upm_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int > len) > { > int i; > - struct nand_chip *chip = mtd->priv; > - struct fsl_upm_nand *fun = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_upm_nand *fun = nand_get_controller_data(chip); > > for (i = 0; i < len; i++) { > out_8(chip->IO_ADDR_W, buf[i]); > @@ -147,7 +147,7 @@ static void upm_nand_write_buf(struct mtd_info *mtd, > const u_char *buf, int len) > static void upm_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) > { > int i; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > for (i = 0; i < len; i++) > buf[i] = in_8(chip->IO_ADDR_R); > @@ -155,8 +155,8 @@ static void upm_nand_read_buf(struct mtd_info *mtd, > u_char *buf, int len) > > static int nand_dev_ready(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct fsl_upm_nand *fun = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct fsl_upm_nand *fun = nand_get_controller_data(chip); > > return fun->dev_ready(fun->chip_nr); > } > @@ -168,7 +168,7 @@ int fsl_upm_nand_init(struct nand_chip *chip, struct > fsl_upm_nand *fun) > > fun->last_ctrl = NAND_CLE; > > - chip->priv = fun; > + nand_set_controller_data(chip, fun); > chip->chip_delay = fun->chip_delay; > chip->ecc.mode = NAND_ECC_SOFT; > chip->cmd_ctrl = fun_cmd_ctrl; > diff --git a/drivers/mtd/nand/fsmc_nand.c b/drivers/mtd/nand/fsmc_nand.c > index 0b8b56f..a1f2cba 100644 > --- a/drivers/mtd/nand/fsmc_nand.c > +++ b/drivers/mtd/nand/fsmc_nand.c > @@ -165,7 +165,7 @@ static int count_written_bits(uint8_t *buff, int size, > int max_bits) > > static void fsmc_nand_hwcontrol(struct mtd_info *mtd, int cmd, uint ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > ulong IO_ADDR_W; > > if (ctrl & NAND_CTRL_CHANGE) { > @@ -410,7 +410,7 @@ int fsmc_nand_switch_ecc(uint32_t eccstrength) > * function, as it doesn't need to switch to a different ECC layout. > */ > mtd = nand_info[nand_curr_device]; > - nand = mtd->priv; > + nand = mtd_to_nand(mtd); > > /* Setup the ecc configurations again */ > if (eccstrength == 1) { > @@ -479,8 +479,7 @@ int fsmc_nand_init(struct nand_chip *nand) > (void __iomem *)CONFIG_SYS_NAND_BASE; > nand->badblockbits = 7; > > - mtd = &nand->mtd; > - mtd->priv = nand; > + mtd = nand_to_mtd(nand); > > switch (fsmc_version) { > case FSMC_VER8: > diff --git a/drivers/mtd/nand/kb9202_nand.c b/drivers/mtd/nand/kb9202_nand.c > index 22c5625..e978cf8 100644 > --- a/drivers/mtd/nand/kb9202_nand.c > +++ b/drivers/mtd/nand/kb9202_nand.c > @@ -35,7 +35,7 @@ > */ > static void kb9202_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned > int ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > if (ctrl & NAND_CTRL_CHANGE) { > ulong IO_ADDR_W = (ulong) this->IO_ADDR_W; > diff --git a/drivers/mtd/nand/kirkwood_nand.c > b/drivers/mtd/nand/kirkwood_nand.c > index d734113..d0a68bd 100644 > --- a/drivers/mtd/nand/kirkwood_nand.c > +++ b/drivers/mtd/nand/kirkwood_nand.c > @@ -33,7 +33,7 @@ static u32 nand_mpp_backup[9] = { 0 }; > static void kw_nand_hwcontrol(struct mtd_info *mtd, int cmd, > unsigned int ctrl) > { > - struct nand_chip *nc = mtd->priv; > + struct nand_chip *nc = mtd_to_nand(mtd); > u32 offs; > > if (cmd == NAND_CMD_NONE) > diff --git a/drivers/mtd/nand/lpc32xx_nand_mlc.c > b/drivers/mtd/nand/lpc32xx_nand_mlc.c > index 236b0be..9475208 100644 > --- a/drivers/mtd/nand/lpc32xx_nand_mlc.c > +++ b/drivers/mtd/nand/lpc32xx_nand_mlc.c > @@ -542,8 +542,6 @@ void board_nand_init(void) > struct mtd_info *mtd = &lpc32xx_chip.mtd; > int ret; > > - mtd->priv = &lpc32xx_chip; > - > /* Set all BOARDSPECIFIC (actually core-specific) fields */ > > lpc32xx_chip.IO_ADDR_R = &lpc32xx_nand_mlc_registers->buff; > diff --git a/drivers/mtd/nand/lpc32xx_nand_slc.c > b/drivers/mtd/nand/lpc32xx_nand_slc.c > index 4e1be36..89b48cb 100644 > --- a/drivers/mtd/nand/lpc32xx_nand_slc.c > +++ b/drivers/mtd/nand/lpc32xx_nand_slc.c > @@ -291,7 +291,7 @@ static void lpc32xx_nand_dma_configure(struct nand_chip > *chip, > static void lpc32xx_nand_xfer(struct mtd_info *mtd, const u8 *buf, > int len, int read) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u32 config; > int ret; > > diff --git a/drivers/mtd/nand/mpc5121_nfc.c b/drivers/mtd/nand/mpc5121_nfc.c > index d836130..362d393 100644 > --- a/drivers/mtd/nand/mpc5121_nfc.c > +++ b/drivers/mtd/nand/mpc5121_nfc.c > @@ -117,8 +117,8 @@ static void mpc5121_nfc_done(struct mtd_info *mtd); > /* Read NFC register */ > static inline u16 nfc_read(struct mtd_info *mtd, uint reg) > { > - struct nand_chip *chip = mtd->priv; > - struct mpc5121_nfc_prv *prv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mpc5121_nfc_prv *prv = nand_get_controller_data(chip); > > return in_be16(prv->regs + reg); > } > @@ -126,8 +126,8 @@ static inline u16 nfc_read(struct mtd_info *mtd, uint reg) > /* Write NFC register */ > static inline void nfc_write(struct mtd_info *mtd, uint reg, u16 val) > { > - struct nand_chip *chip = mtd->priv; > - struct mpc5121_nfc_prv *prv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mpc5121_nfc_prv *prv = nand_get_controller_data(chip); > > out_be16(prv->regs + reg, val); > } > @@ -211,7 +211,7 @@ static void mpc5121_nfc_done(struct mtd_info *mtd) > /* Do address cycle(s) */ > static void mpc5121_nfc_addr_cycle(struct mtd_info *mtd, int column, int > page) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u32 pagemask = chip->pagemask; > > if (column != -1) { > @@ -283,8 +283,8 @@ static int mpc5121_nfc_dev_ready(struct mtd_info *mtd) > static void mpc5121_nfc_command(struct mtd_info *mtd, unsigned command, > int column, int page) > { > - struct nand_chip *chip = mtd->priv; > - struct mpc5121_nfc_prv *prv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mpc5121_nfc_prv *prv = nand_get_controller_data(chip); > > prv->column = (column >= 0) ? column : 0; > prv->spareonly = 0; > @@ -357,8 +357,8 @@ static void mpc5121_nfc_command(struct mtd_info *mtd, > unsigned command, > static void mpc5121_nfc_copy_spare(struct mtd_info *mtd, uint offset, > u8 * buffer, uint size, int wr) > { > - struct nand_chip *nand = mtd->priv; > - struct mpc5121_nfc_prv *prv = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct mpc5121_nfc_prv *prv = nand_get_controller_data(nand); > uint o, s, sbsize, blksize; > > /* > @@ -410,8 +410,8 @@ static void mpc5121_nfc_copy_spare(struct mtd_info *mtd, > uint offset, > static void mpc5121_nfc_buf_copy(struct mtd_info *mtd, u_char * buf, int len, > int wr) > { > - struct nand_chip *chip = mtd->priv; > - struct mpc5121_nfc_prv *prv = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mpc5121_nfc_prv *prv = nand_get_controller_data(chip); > uint c = prv->column; > uint l; > > @@ -489,7 +489,7 @@ static u16 mpc5121_nfc_read_word(struct mtd_info *mtd) > static int mpc5121_nfc_read_hw_config(struct mtd_info *mtd) > { > immap_t *im = (immap_t *)CONFIG_SYS_IMMR; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > uint rcw_pagesize = 0; > uint rcw_sparesize = 0; > uint rcw_width; > @@ -568,8 +568,7 @@ int board_nand_init(struct nand_chip *chip) > } > > mtd = &chip->mtd; > - mtd->priv = chip; > - chip->priv = prv; > + nand_set_controller_data(chip, prv); > > /* Read NFC configuration from Reset Config Word */ > retval = mpc5121_nfc_read_hw_config(mtd); > diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c > index 5e7b9cf..f935055 100644 > --- a/drivers/mtd/nand/mxc_nand.c > +++ b/drivers/mtd/nand/mxc_nand.c > @@ -351,8 +351,8 @@ static int mxc_nand_dev_ready(struct mtd_info *mtd) > > static void _mxc_nand_enable_hwecc(struct mtd_info *mtd, int on) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > #if defined(MXC_NFC_V1) || defined(MXC_NFC_V2_1) > uint16_t tmp = readnfc(&host->regs->config1); > > @@ -386,7 +386,7 @@ static int mxc_nand_read_oob_syndrome(struct mtd_info > *mtd, > struct nand_chip *chip, > int page) > { > - struct mxc_nand_host *host = chip->priv; > + struct mxc_nand_host *host = nand_get_controller_data(chip); > uint8_t *buf = chip->oob_poi; > int length = mtd->oobsize; > int eccpitch = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad; > @@ -441,7 +441,7 @@ static int mxc_nand_read_page_raw_syndrome(struct > mtd_info *mtd, > int oob_required, > int page) > { > - struct mxc_nand_host *host = chip->priv; > + struct mxc_nand_host *host = nand_get_controller_data(chip); > int eccsize = chip->ecc.size; > int eccbytes = chip->ecc.bytes; > int eccpitch = eccbytes + chip->ecc.prepad + chip->ecc.postpad; > @@ -486,7 +486,7 @@ static int mxc_nand_read_page_syndrome(struct mtd_info > *mtd, > int oob_required, > int page) > { > - struct mxc_nand_host *host = chip->priv; > + struct mxc_nand_host *host = nand_get_controller_data(chip); > int n, eccsize = chip->ecc.size; > int eccbytes = chip->ecc.bytes; > int eccpitch = eccbytes + chip->ecc.prepad + chip->ecc.postpad; > @@ -550,7 +550,7 @@ static int mxc_nand_read_page_syndrome(struct mtd_info > *mtd, > static int mxc_nand_write_oob_syndrome(struct mtd_info *mtd, > struct nand_chip *chip, int page) > { > - struct mxc_nand_host *host = chip->priv; > + struct mxc_nand_host *host = nand_get_controller_data(chip); > int eccpitch = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad; > int length = mtd->oobsize; > int i, len, status, steps = chip->ecc.steps; > @@ -578,7 +578,7 @@ static int mxc_nand_write_page_raw_syndrome(struct > mtd_info *mtd, > const uint8_t *buf, > int oob_required) > { > - struct mxc_nand_host *host = chip->priv; > + struct mxc_nand_host *host = nand_get_controller_data(chip); > int eccsize = chip->ecc.size; > int eccbytes = chip->ecc.bytes; > int eccpitch = eccbytes + chip->ecc.prepad + chip->ecc.postpad; > @@ -618,7 +618,7 @@ static int mxc_nand_write_page_syndrome(struct mtd_info > *mtd, > const uint8_t *buf, > int oob_required) > { > - struct mxc_nand_host *host = chip->priv; > + struct mxc_nand_host *host = nand_get_controller_data(chip); > int i, n, eccsize = chip->ecc.size; > int eccbytes = chip->ecc.bytes; > int eccpitch = eccbytes + chip->ecc.prepad + chip->ecc.postpad; > @@ -661,8 +661,8 @@ static int mxc_nand_write_page_syndrome(struct mtd_info > *mtd, > static int mxc_nand_correct_data(struct mtd_info *mtd, u_char *dat, > u_char *read_ecc, u_char *calc_ecc) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > uint32_t ecc_status = readl(&host->regs->ecc_status_result); > int subpages = mtd->writesize / nand_chip->subpagesize; > int pg2blk_shift = nand_chip->phys_erase_shift - > @@ -700,8 +700,8 @@ static int mxc_nand_correct_data(struct mtd_info *mtd, > u_char *dat, > static int mxc_nand_correct_data(struct mtd_info *mtd, u_char *dat, > u_char *read_ecc, u_char *calc_ecc) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > > /* > * 1-Bit errors are automatically corrected in HW. No need for > @@ -729,8 +729,8 @@ static int mxc_nand_calculate_ecc(struct mtd_info *mtd, > const u_char *dat, > > static u_char mxc_nand_read_byte(struct mtd_info *mtd) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > uint8_t ret = 0; > uint16_t col; > uint16_t __iomem *main_buf = > @@ -769,8 +769,8 @@ static u_char mxc_nand_read_byte(struct mtd_info *mtd) > > static uint16_t mxc_nand_read_word(struct mtd_info *mtd) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > uint16_t col, ret; > uint16_t __iomem *p; > > @@ -821,8 +821,8 @@ static uint16_t mxc_nand_read_word(struct mtd_info *mtd) > static void mxc_nand_write_buf(struct mtd_info *mtd, > const u_char *buf, int len) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > int n, col, i = 0; > > MTDDEBUG(MTD_DEBUG_LEVEL3, > @@ -895,8 +895,8 @@ static void mxc_nand_write_buf(struct mtd_info *mtd, > */ > static void mxc_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > int n, col, i = 0; > > MTDDEBUG(MTD_DEBUG_LEVEL3, > @@ -955,8 +955,8 @@ static void mxc_nand_read_buf(struct mtd_info *mtd, > u_char *buf, int len) > */ > static void mxc_nand_select_chip(struct mtd_info *mtd, int chip) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > > switch (chip) { > case -1: > @@ -982,8 +982,8 @@ static void mxc_nand_select_chip(struct mtd_info *mtd, > int chip) > void mxc_nand_command(struct mtd_info *mtd, unsigned command, > int column, int page_addr) > { > - struct nand_chip *nand_chip = mtd->priv; > - struct mxc_nand_host *host = nand_chip->priv; > + struct nand_chip *nand_chip = mtd_to_nand(mtd); > + struct mxc_nand_host *host = nand_get_controller_data(nand_chip); > > MTDDEBUG(MTD_DEBUG_LEVEL3, > "mxc_nand_command (cmd = 0x%x, col = 0x%x, page = 0x%x)\n", > @@ -1165,13 +1165,12 @@ int board_nand_init(struct nand_chip *this) > > /* structures must be linked */ > mtd = &this->mtd; > - mtd->priv = this; > host->nand = this; > > /* 5 us command delay time */ > this->chip_delay = 5; > > - this->priv = host; > + nand_set_controller_data(this, host); > this->dev_ready = mxc_nand_dev_ready; > this->cmdfunc = mxc_nand_command; > this->select_chip = mxc_nand_select_chip; > diff --git a/drivers/mtd/nand/mxs_nand.c b/drivers/mtd/nand/mxs_nand.c > index b5bbd88..7053ff2 100644 > --- a/drivers/mtd/nand/mxs_nand.c > +++ b/drivers/mtd/nand/mxs_nand.c > @@ -264,8 +264,8 @@ static int mxs_nand_wait_for_bch_complete(void) > */ > static void mxs_nand_cmd_ctrl(struct mtd_info *mtd, int data, unsigned int > ctrl) > { > - struct nand_chip *nand = mtd->priv; > - struct mxs_nand_info *nand_info = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > struct mxs_dma_desc *d; > uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip; > int ret; > @@ -343,8 +343,8 @@ static void mxs_nand_cmd_ctrl(struct mtd_info *mtd, int > data, unsigned int ctrl) > */ > static int mxs_nand_device_ready(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct mxs_nand_info *nand_info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(chip); > struct mxs_gpmi_regs *gpmi_regs = > (struct mxs_gpmi_regs *)MXS_GPMI_BASE; > uint32_t tmp; > @@ -360,8 +360,8 @@ static int mxs_nand_device_ready(struct mtd_info *mtd) > */ > static void mxs_nand_select_chip(struct mtd_info *mtd, int chip) > { > - struct nand_chip *nand = mtd->priv; > - struct mxs_nand_info *nand_info = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > > nand_info->cur_chip = chip; > } > @@ -410,8 +410,8 @@ static void mxs_nand_swap_block_mark(struct mtd_info *mtd, > */ > static void mxs_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int length) > { > - struct nand_chip *nand = mtd->priv; > - struct mxs_nand_info *nand_info = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > struct mxs_dma_desc *d; > uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip; > int ret; > @@ -494,8 +494,8 @@ rtn: > static void mxs_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, > int length) > { > - struct nand_chip *nand = mtd->priv; > - struct mxs_nand_info *nand_info = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > struct mxs_dma_desc *d; > uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip; > int ret; > @@ -559,7 +559,7 @@ static int mxs_nand_ecc_read_page(struct mtd_info *mtd, > struct nand_chip *nand, > uint8_t *buf, int oob_required, > int page) > { > - struct mxs_nand_info *nand_info = nand->priv; > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > struct mxs_dma_desc *d; > uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip; > uint32_t corrected = 0, failed = 0; > @@ -709,7 +709,7 @@ static int mxs_nand_ecc_write_page(struct mtd_info *mtd, > struct nand_chip *nand, const uint8_t *buf, > int oob_required) > { > - struct mxs_nand_info *nand_info = nand->priv; > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > struct mxs_dma_desc *d; > uint32_t channel = MXS_DMA_CHANNEL_AHB_APBH_GPMI0 + nand_info->cur_chip; > int ret; > @@ -775,8 +775,8 @@ rtn: > static int mxs_nand_hook_read_oob(struct mtd_info *mtd, loff_t from, > struct mtd_oob_ops *ops) > { > - struct nand_chip *chip = mtd->priv; > - struct mxs_nand_info *nand_info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(chip); > int ret; > > if (ops->mode == MTD_OPS_RAW) > @@ -800,8 +800,8 @@ static int mxs_nand_hook_read_oob(struct mtd_info *mtd, > loff_t from, > static int mxs_nand_hook_write_oob(struct mtd_info *mtd, loff_t to, > struct mtd_oob_ops *ops) > { > - struct nand_chip *chip = mtd->priv; > - struct mxs_nand_info *nand_info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(chip); > int ret; > > if (ops->mode == MTD_OPS_RAW) > @@ -824,8 +824,8 @@ static int mxs_nand_hook_write_oob(struct mtd_info *mtd, > loff_t to, > */ > static int mxs_nand_hook_block_markbad(struct mtd_info *mtd, loff_t ofs) > { > - struct nand_chip *chip = mtd->priv; > - struct mxs_nand_info *nand_info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(chip); > int ret; > > nand_info->marking_block_bad = 1; > @@ -884,7 +884,7 @@ static int mxs_nand_hook_block_markbad(struct mtd_info > *mtd, loff_t ofs) > static int mxs_nand_ecc_read_oob(struct mtd_info *mtd, struct nand_chip > *nand, > int page) > { > - struct mxs_nand_info *nand_info = nand->priv; > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > > /* > * First, fill in the OOB buffer. If we're doing a raw read, we need to > @@ -919,7 +919,7 @@ static int mxs_nand_ecc_read_oob(struct mtd_info *mtd, > struct nand_chip *nand, > static int mxs_nand_ecc_write_oob(struct mtd_info *mtd, struct nand_chip > *nand, > int page) > { > - struct mxs_nand_info *nand_info = nand->priv; > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > uint8_t block_mark = 0; > > /* > @@ -982,8 +982,8 @@ static int mxs_nand_block_bad(struct mtd_info *mtd, > loff_t ofs, int getchip) > */ > static int mxs_nand_scan_bbt(struct mtd_info *mtd) > { > - struct nand_chip *nand = mtd->priv; > - struct mxs_nand_info *nand_info = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct mxs_nand_info *nand_info = nand_get_controller_data(nand); > struct mxs_bch_regs *bch_regs = (struct mxs_bch_regs *)MXS_BCH_BASE; > uint32_t tmp; > > @@ -1175,7 +1175,7 @@ int board_nand_init(struct nand_chip *nand) > > memset(&fake_ecc_layout, 0, sizeof(fake_ecc_layout)); > > - nand->priv = nand_info; > + nand_set_controller_data(nand, nand_info); > nand->options |= NAND_NO_SUBPAGE_WRITE; > > nand->cmd_ctrl = mxs_nand_cmd_ctrl; > diff --git a/drivers/mtd/nand/mxs_nand_spl.c b/drivers/mtd/nand/mxs_nand_spl.c > index 0b3a604..a8a3084 100644 > --- a/drivers/mtd/nand/mxs_nand_spl.c > +++ b/drivers/mtd/nand/mxs_nand_spl.c > @@ -14,7 +14,7 @@ static struct nand_chip nand_chip; > static void mxs_nand_command(struct mtd_info *mtd, unsigned int command, > int column, int page_addr) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > u32 timeo, time_start; > > /* write out the command to the device */ > @@ -51,7 +51,7 @@ static void mxs_nand_command(struct mtd_info *mtd, unsigned > int command, > > static int mxs_flash_ident(struct mtd_info *mtd) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > int i; > u8 mfg_id, dev_id; > u8 id_data[8]; > @@ -111,7 +111,7 @@ static int mxs_flash_ident(struct mtd_info *mtd) > > static int mxs_read_page_ecc(struct mtd_info *mtd, void *buf, unsigned int > page) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > int ret; > > chip->cmdfunc(mtd, NAND_CMD_READ0, 0x0, page); > @@ -125,7 +125,7 @@ static int mxs_read_page_ecc(struct mtd_info *mtd, void > *buf, unsigned int page) > > static int is_badblock(struct mtd_info *mtd, loff_t offs, int allowbbt) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > unsigned int block = offs >> chip->phys_erase_shift; > unsigned int page = offs >> chip->page_shift; > > @@ -148,7 +148,6 @@ static int mxs_nand_init(void) > /* init mxs nand driver */ > board_nand_init(&nand_chip); > mtd = &nand_chip.mtd; > - mtd->priv = &nand_chip; > /* set mtd functions */ > nand_chip.cmdfunc = mxs_nand_command; > nand_chip.numchips = 1; > @@ -181,7 +180,7 @@ int nand_spl_load_image(uint32_t offs, unsigned int size, > void *buf) > > if (mxs_nand_init()) > return -ENODEV; > - chip = mtd->priv; > + chip = mtd_to_nand(mtd); > page = offs >> chip->page_shift; > nand_page_per_block = mtd->erasesize / mtd->writesize; > > diff --git a/drivers/mtd/nand/nand.c b/drivers/mtd/nand/nand.c > index ddd8249..f449316 100644 > --- a/drivers/mtd/nand/nand.c > +++ b/drivers/mtd/nand/nand.c > @@ -73,14 +73,13 @@ int nand_register(int devnum, struct mtd_info *mtd) > static void nand_init_chip(int i) > { > struct nand_chip *nand = &nand_chip[i]; > - struct mtd_info *mtd = &nand->mtd; > + struct mtd_info *mtd = nand_to_mtd(nand); > ulong base_addr = base_address[i]; > int maxchips = CONFIG_SYS_NAND_MAX_CHIPS; > > if (maxchips < 1) > maxchips = 1; > > - mtd->priv = nand; > nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)base_addr; > > if (board_nand_init(nand)) > @@ -110,7 +109,7 @@ void nand_init(void) > /* > * Select the chip in the board/cpu specific driver > */ > - board_nand_select_device(nand_info[nand_curr_device]->priv, > + board_nand_select_device(mtd_to_nand(nand_info[nand_curr_device]), > nand_curr_device); > #endif > } > diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c > index 9e8fc1f..92f581e 100644 > --- a/drivers/mtd/nand/nand_base.c > +++ b/drivers/mtd/nand/nand_base.c > @@ -105,7 +105,7 @@ DEFINE_LED_TRIGGER(nand_led_trigger); > static int check_offs_len(struct mtd_info *mtd, > loff_t ofs, uint64_t len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > int ret = 0; > > /* Start address must align on block boundary */ > @@ -131,7 +131,7 @@ static int check_offs_len(struct mtd_info *mtd, > */ > static void nand_release_device(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > /* De-select the NAND device */ > chip->select_chip(mtd, -1); > @@ -145,7 +145,7 @@ static void nand_release_device(struct mtd_info *mtd) > */ > uint8_t nand_read_byte(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > return readb(chip->IO_ADDR_R); > } > > @@ -158,7 +158,7 @@ uint8_t nand_read_byte(struct mtd_info *mtd) > */ > static uint8_t nand_read_byte16(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R)); > } > > @@ -170,7 +170,7 @@ static uint8_t nand_read_byte16(struct mtd_info *mtd) > */ > static u16 nand_read_word(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > return readw(chip->IO_ADDR_R); > } > > @@ -183,7 +183,7 @@ static u16 nand_read_word(struct mtd_info *mtd) > */ > static void nand_select_chip(struct mtd_info *mtd, int chipnr) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > switch (chipnr) { > case -1: > @@ -206,7 +206,7 @@ static void nand_select_chip(struct mtd_info *mtd, int > chipnr) > */ > static void nand_write_byte(struct mtd_info *mtd, uint8_t byte) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > chip->write_buf(mtd, &byte, 1); > } > @@ -220,7 +220,7 @@ static void nand_write_byte(struct mtd_info *mtd, uint8_t > byte) > */ > static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > uint16_t word = byte; > > /* > @@ -287,7 +287,7 @@ static void iowrite16_rep(void *addr, void *buf, int len) > */ > void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > iowrite8_rep(chip->IO_ADDR_W, buf, len); > } > @@ -302,7 +302,7 @@ void nand_write_buf(struct mtd_info *mtd, const uint8_t > *buf, int len) > */ > void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > ioread8_rep(chip->IO_ADDR_R, buf, len); > } > @@ -317,7 +317,7 @@ void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, > int len) > */ > void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u16 *p = (u16 *) buf; > > iowrite16_rep(chip->IO_ADDR_W, p, len >> 1); > @@ -333,7 +333,7 @@ void nand_write_buf16(struct mtd_info *mtd, const uint8_t > *buf, int len) > */ > void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u16 *p = (u16 *) buf; > > ioread16_rep(chip->IO_ADDR_R, p, len >> 1); > @@ -350,7 +350,7 @@ void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, > int len) > static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip) > { > int page, chipnr, res = 0, i = 0; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u16 bad; > > if (chip->bbt_options & NAND_BBT_SCANLASTPAGE) > @@ -410,7 +410,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t > ofs, int getchip) > */ > static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct mtd_oob_ops ops; > uint8_t buf[2] = { 0, 0 }; > int ret = 0, res, i = 0; > @@ -460,7 +460,7 @@ static int nand_default_block_markbad(struct mtd_info > *mtd, loff_t ofs) > */ > static int nand_block_markbad_lowlevel(struct mtd_info *mtd, loff_t ofs) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > int res, ret = 0; > > if (!(chip->bbt_options & NAND_BBT_NO_OOB_BBM)) { > @@ -501,7 +501,7 @@ static int nand_block_markbad_lowlevel(struct mtd_info > *mtd, loff_t ofs) > */ > static int nand_check_wp(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > /* Broken xD cards report WP despite being writable */ > if (chip->options & NAND_BROKEN_XD) > @@ -521,7 +521,7 @@ static int nand_check_wp(struct mtd_info *mtd) > */ > static int nand_block_isreserved(struct mtd_info *mtd, loff_t ofs) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > if (!chip->bbt) > return 0; > @@ -542,7 +542,7 @@ static int nand_block_isreserved(struct mtd_info *mtd, > loff_t ofs) > static int nand_block_checkbad(struct mtd_info *mtd, loff_t ofs, int getchip, > int allowbbt) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > if (!(chip->options & NAND_SKIP_BBTSCAN) && > !(chip->options & NAND_BBT_SCANNED)) { > @@ -560,7 +560,7 @@ static int nand_block_checkbad(struct mtd_info *mtd, > loff_t ofs, int getchip, > /* Wait for the ready pin, after a command. The timeout is caught later. */ > void nand_wait_ready(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > u32 timeo = (CONFIG_SYS_HZ * 20) / 1000; > u32 time_start; > > @@ -583,7 +583,7 @@ EXPORT_SYMBOL_GPL(nand_wait_ready); > */ > static void nand_wait_status_ready(struct mtd_info *mtd, unsigned long timeo) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > u32 time_start; > > timeo = (CONFIG_SYS_HZ * timeo) / 1000; > @@ -608,7 +608,7 @@ static void nand_wait_status_ready(struct mtd_info *mtd, > unsigned long timeo) > static void nand_command(struct mtd_info *mtd, unsigned int command, > int column, int page_addr) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE; > > /* Write out the command to the device */ > @@ -711,7 +711,7 @@ static void nand_command(struct mtd_info *mtd, unsigned > int command, > static void nand_command_lp(struct mtd_info *mtd, unsigned int command, > int column, int page_addr) > { > - register struct nand_chip *chip = mtd->priv; > + register struct nand_chip *chip = mtd_to_nand(mtd); > > /* Emulate NAND_CMD_READOOB */ > if (command == NAND_CMD_READOOB) { > @@ -835,7 +835,7 @@ static void panic_nand_get_device(struct nand_chip *chip, > static int > nand_get_device(struct mtd_info *mtd, int new_state) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > chip->state = new_state; > return 0; > } > @@ -1332,7 +1332,7 @@ static uint8_t *nand_transfer_oob(struct nand_chip > *chip, uint8_t *oob, > */ > static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > pr_debug("setting READ RETRY mode %d\n", retry_mode); > > @@ -1357,7 +1357,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, > loff_t from, > struct mtd_oob_ops *ops) > { > int chipnr, page, realpage, col, bytes, aligned, oob_required; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > int ret = 0; > uint32_t readlen = ops->len; > uint32_t oobreadlen = ops->ooblen; > @@ -1700,7 +1700,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, > loff_t from, > struct mtd_oob_ops *ops) > { > int page, realpage, chipnr; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct mtd_ecc_stats stats; > int readlen = ops->ooblen; > int len; > @@ -2139,7 +2139,7 @@ static int nand_write_page(struct mtd_info *mtd, struct > nand_chip *chip, > static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len, > struct mtd_oob_ops *ops) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > /* > * Initialise to all 0xFF, to avoid the possibility of left over OOB > @@ -2199,7 +2199,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, > loff_t to, > struct mtd_oob_ops *ops) > { > int chipnr, realpage, page, blockmask, column; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > uint32_t writelen = ops->len; > > uint32_t oobwritelen = ops->ooblen; > @@ -2328,7 +2328,7 @@ err_out: > static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len, > size_t *retlen, const uint8_t *buf) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct mtd_oob_ops ops; > int ret; > > @@ -2388,7 +2388,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, > loff_t to, > struct mtd_oob_ops *ops) > { > int chipnr, page, status, len; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > pr_debug("%s: to = 0x%08x, len = %i\n", > __func__, (unsigned int)to, (int)ops->ooblen); > @@ -2513,7 +2513,7 @@ out: > */ > static int single_erase(struct mtd_info *mtd, int page) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > /* Send commands to erase a block */ > chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page); > chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1); > @@ -2545,7 +2545,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct > erase_info *instr, > int allowbbt) > { > int page, status, pages_per_block, ret, chipnr; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > loff_t len; > > pr_debug("%s: start = 0x%012llx, len = %llu\n", > @@ -2908,7 +2908,7 @@ ext_out: > > static int nand_setup_read_retry_micron(struct mtd_info *mtd, int retry_mode) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > uint8_t feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode}; > > return chip->onfi_set_features(mtd, chip, ONFI_FEATURE_ADDR_READ_RETRY, > @@ -3616,7 +3616,7 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips, > struct nand_flash_dev *table) > { > int i, nand_maf_id, nand_dev_id; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_flash_dev *type; > > /* Set the default functions */ > @@ -3680,7 +3680,7 @@ EXPORT_SYMBOL(nand_scan_ident); > */ > static bool nand_ecc_strength_good(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_ecc_ctrl *ecc = &chip->ecc; > int corr, ds_corr; > > @@ -3709,7 +3709,7 @@ static bool nand_ecc_strength_good(struct mtd_info *mtd) > int nand_scan_tail(struct mtd_info *mtd) > { > int i; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_ecc_ctrl *ecc = &chip->ecc; > struct nand_buffers *nbuf; > > diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c > index 00f28a4..152f3bc 100644 > --- a/drivers/mtd/nand/nand_bbt.c > +++ b/drivers/mtd/nand/nand_bbt.c > @@ -173,7 +173,7 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, > int page, int num, > struct nand_bbt_descr *td, int offs) > { > int res, ret = 0, i, j, act = 0; > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > size_t retlen, len, totlen; > loff_t from; > int bits = td->options & NAND_BBT_NRBITS_MSK; > @@ -264,7 +264,7 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, > int page, int num, > */ > static int read_abs_bbt(struct mtd_info *mtd, uint8_t *buf, struct > nand_bbt_descr *td, int chip) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int res = 0, i; > > if (td->options & NAND_BBT_PERCHIP) { > @@ -389,7 +389,7 @@ static u32 bbt_get_ver_offs(struct mtd_info *mtd, struct > nand_bbt_descr *td) > static void read_abs_bbts(struct mtd_info *mtd, uint8_t *buf, > struct nand_bbt_descr *td, struct nand_bbt_descr *md) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > /* Read the primary version, if available */ > if (td->options & NAND_BBT_VERSION) { > @@ -455,7 +455,7 @@ static int scan_block_fast(struct mtd_info *mtd, struct > nand_bbt_descr *bd, > static int create_bbt(struct mtd_info *mtd, uint8_t *buf, > struct nand_bbt_descr *bd, int chip) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int i, numblocks, numpages; > int startblock; > loff_t from; > @@ -524,7 +524,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, > */ > static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct > nand_bbt_descr *td) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int i, chips; > int startblock, block, dir; > int scanlen = mtd->writesize + mtd->oobsize; > @@ -619,7 +619,7 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf, > struct nand_bbt_descr *td, struct nand_bbt_descr *md, > int chipsel) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > struct erase_info einfo; > int i, res, chip = 0; > int bits, startblock, dir, page, offs, numblocks, sft, sftmsk; > @@ -820,7 +820,7 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf, > */ > static inline int nand_memory_bbt(struct mtd_info *mtd, struct > nand_bbt_descr *bd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > return create_bbt(mtd, this->buffers->databuf, bd, -1); > } > @@ -839,7 +839,7 @@ static inline int nand_memory_bbt(struct mtd_info *mtd, > struct nand_bbt_descr *b > static int check_create(struct mtd_info *mtd, uint8_t *buf, struct > nand_bbt_descr *bd) > { > int i, chips, writeops, create, chipsel, res, res2; > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > struct nand_bbt_descr *td = this->bbt_td; > struct nand_bbt_descr *md = this->bbt_md; > struct nand_bbt_descr *rd, *rd2; > @@ -963,7 +963,7 @@ static int check_create(struct mtd_info *mtd, uint8_t > *buf, struct nand_bbt_desc > */ > static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int i, j, chips, block, nrblocks, update; > uint8_t oldval; > > @@ -1023,7 +1023,7 @@ static void mark_bbt_region(struct mtd_info *mtd, > struct nand_bbt_descr *td) > */ > static void verify_bbt_descr(struct mtd_info *mtd, struct nand_bbt_descr *bd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u32 pattern_len; > u32 bits; > u32 table_size; > @@ -1075,7 +1075,7 @@ static void verify_bbt_descr(struct mtd_info *mtd, > struct nand_bbt_descr *bd) > */ > int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int len, res = 0; > uint8_t *buf; > struct nand_bbt_descr *td = this->bbt_td; > @@ -1143,7 +1143,7 @@ int nand_scan_bbt(struct mtd_info *mtd, struct > nand_bbt_descr *bd) > */ > static int nand_update_bbt(struct mtd_info *mtd, loff_t offs) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int len, res = 0; > int chip, chipsel; > uint8_t *buf; > @@ -1277,7 +1277,7 @@ static int nand_create_badblock_pattern(struct > nand_chip *this) > */ > int nand_default_bbt(struct mtd_info *mtd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int ret; > > /* Is a flash based bad block table requested? */ > @@ -1313,7 +1313,7 @@ int nand_default_bbt(struct mtd_info *mtd) > */ > int nand_isreserved_bbt(struct mtd_info *mtd, loff_t offs) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int block; > > block = (int)(offs >> this->bbt_erase_shift); > @@ -1328,7 +1328,7 @@ int nand_isreserved_bbt(struct mtd_info *mtd, loff_t > offs) > */ > int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int block, res; > > block = (int)(offs >> this->bbt_erase_shift); > @@ -1355,7 +1355,7 @@ int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, > int allowbbt) > */ > int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int block, ret = 0; > > block = (int)(offs >> this->bbt_erase_shift); > diff --git a/drivers/mtd/nand/nand_bch.c b/drivers/mtd/nand/nand_bch.c > index 35d2140..d7f6ce0 100644 > --- a/drivers/mtd/nand/nand_bch.c > +++ b/drivers/mtd/nand/nand_bch.c > @@ -41,7 +41,7 @@ struct nand_bch_control { > int nand_bch_calculate_ecc(struct mtd_info *mtd, const unsigned char *buf, > unsigned char *code) > { > - const struct nand_chip *chip = mtd->priv; > + const struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_bch_control *nbc = chip->ecc.priv; > unsigned int i; > > @@ -67,7 +67,7 @@ int nand_bch_calculate_ecc(struct mtd_info *mtd, const > unsigned char *buf, > int nand_bch_correct_data(struct mtd_info *mtd, unsigned char *buf, > unsigned char *read_ecc, unsigned char *calc_ecc) > { > - const struct nand_chip *chip = mtd->priv; > + const struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_bch_control *nbc = chip->ecc.priv; > unsigned int *errloc = nbc->errloc; > int i, count; > diff --git a/drivers/mtd/nand/nand_plat.c b/drivers/mtd/nand/nand_plat.c > index 37a0206..335c3e3 100644 > --- a/drivers/mtd/nand/nand_plat.c > +++ b/drivers/mtd/nand/nand_plat.c > @@ -25,7 +25,7 @@ > > static void plat_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > if (cmd == NAND_CMD_NONE) > return; > @@ -39,7 +39,7 @@ static void plat_cmd_ctrl(struct mtd_info *mtd, int cmd, > unsigned int ctrl) > #ifdef NAND_PLAT_DEV_READY > static int plat_dev_ready(struct mtd_info *mtd) > { > - return NAND_PLAT_DEV_READY((struct nand_chip *)mtd->priv); > + return NAND_PLAT_DEV_READY((struct nand_chip *)mtd_to_nand(mtd)); > } > #else > # define plat_dev_ready NULL > diff --git a/drivers/mtd/nand/nand_spl_simple.c > b/drivers/mtd/nand/nand_spl_simple.c > index bc6a09a..b023e00 100644 > --- a/drivers/mtd/nand/nand_spl_simple.c > +++ b/drivers/mtd/nand/nand_spl_simple.c > @@ -26,7 +26,7 @@ static struct nand_chip nand_chip; > static int nand_command(int block, int page, uint32_t offs, > u8 cmd) > { > - struct nand_chip *this = mtd->priv(); > + struct nand_chip *this = mtd_to_nand(mtd); > int page_addr = page + block * CONFIG_SYS_NAND_PAGE_COUNT; > > while (!this->dev_ready(mtd)) > @@ -63,7 +63,7 @@ static int nand_command(int block, int page, uint32_t offs, > static int nand_command(int block, int page, uint32_t offs, > u8 cmd) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > int page_addr = page + block * CONFIG_SYS_NAND_PAGE_COUNT; > void (*hwctrl)(struct mtd_info *mtd, int cmd, > unsigned int ctrl) = this->cmd_ctrl; > @@ -114,7 +114,7 @@ static int nand_command(int block, int page, uint32_t > offs, > > static int nand_is_bad_block(int block) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_char bb_data[2]; > > nand_command(block, 0, CONFIG_SYS_NAND_BAD_BLOCK_POS, > @@ -139,7 +139,7 @@ static int nand_is_bad_block(int block) > #if defined(CONFIG_SYS_NAND_HW_ECC_OOBFIRST) > static int nand_read_page(int block, int page, uchar *dst) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_char ecc_calc[ECCTOTAL]; > u_char ecc_code[ECCTOTAL]; > u_char oob_data[CONFIG_SYS_NAND_OOBSIZE]; > @@ -170,7 +170,7 @@ static int nand_read_page(int block, int page, uchar *dst) > #else > static int nand_read_page(int block, int page, void *dst) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > u_char ecc_calc[ECCTOTAL]; > u_char ecc_code[ECCTOTAL]; > u_char oob_data[CONFIG_SYS_NAND_OOBSIZE]; > @@ -250,7 +250,6 @@ void nand_init(void) > * Init board specific nand support > */ > mtd = &nand_chip.mtd; > - mtd->priv = &nand_chip; > nand_chip.IO_ADDR_R = nand_chip.IO_ADDR_W = > (void __iomem *)CONFIG_SYS_NAND_BASE; > board_nand_init(&nand_chip); > diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c > index 90bf798..9b61087 100644 > --- a/drivers/mtd/nand/nand_util.c > +++ b/drivers/mtd/nand/nand_util.c > @@ -59,7 +59,7 @@ int nand_erase_opts(struct mtd_info *mtd, > int percent_complete = -1; > const char *mtd_device = mtd->name; > struct mtd_oob_ops oob_opts; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > if ((opts->offset & (mtd->erasesize - 1)) != 0) { > printf("Attempt to erase non block-aligned data\n"); > @@ -217,7 +217,7 @@ int nand_lock(struct mtd_info *mtd, int tight) > { > int ret = 0; > int status; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > /* select the NAND device */ > chip->select_chip(mtd, 0); > @@ -267,7 +267,7 @@ int nand_get_lock_status(struct mtd_info *mtd, loff_t > offset) > int ret = 0; > int chipnr; > int page; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > /* select the NAND device */ > chipnr = (int)(offset >> chip->chip_shift); > @@ -314,7 +314,7 @@ int nand_unlock(struct mtd_info *mtd, loff_t start, > size_t length, > int chipnr; > int status; > int page; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > debug("nand_unlock%s: start: %08llx, length: %zd!\n", > allexcept ? " (allexcept)" : "", start, length); > diff --git a/drivers/mtd/nand/ndfc.c b/drivers/mtd/nand/ndfc.c > index 8a68cb0..ee353c7 100644 > --- a/drivers/mtd/nand/ndfc.c > +++ b/drivers/mtd/nand/ndfc.c > @@ -37,7 +37,7 @@ static int ndfc_cs[NDFC_MAX_BANKS]; > > static void ndfc_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) > { > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > ulong base = (ulong) this->IO_ADDR_W & 0xffffff00; > > if (cmd == NAND_CMD_NONE) > @@ -51,7 +51,7 @@ static void ndfc_hwcontrol(struct mtd_info *mtd, int cmd, > unsigned int ctrl) > > static int ndfc_dev_ready(struct mtd_info *mtdinfo) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > ulong base = (ulong) this->IO_ADDR_W & 0xffffff00; > > return (in_be32((u32 *)(base + NDFC_STAT)) & NDFC_STAT_IS_READY); > @@ -59,7 +59,7 @@ static int ndfc_dev_ready(struct mtd_info *mtdinfo) > > static void ndfc_enable_hwecc(struct mtd_info *mtdinfo, int mode) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > ulong base = (ulong) this->IO_ADDR_W & 0xffffff00; > u32 ccr; > > @@ -71,7 +71,7 @@ static void ndfc_enable_hwecc(struct mtd_info *mtdinfo, int > mode) > static int ndfc_calculate_ecc(struct mtd_info *mtdinfo, > const u_char *dat, u_char *ecc_code) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > ulong base = (ulong) this->IO_ADDR_W & 0xffffff00; > u32 ecc; > u8 *p = (u8 *)&ecc; > @@ -96,7 +96,7 @@ static int ndfc_calculate_ecc(struct mtd_info *mtdinfo, > */ > static void ndfc_read_buf(struct mtd_info *mtdinfo, uint8_t *buf, int len) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > ulong base = (ulong) this->IO_ADDR_W & 0xffffff00; > uint32_t *p = (uint32_t *) buf; > > @@ -110,7 +110,7 @@ static void ndfc_read_buf(struct mtd_info *mtdinfo, > uint8_t *buf, int len) > */ > static void ndfc_write_buf(struct mtd_info *mtdinfo, const uint8_t *buf, int > len) > { > - struct nand_chip *this = mtdinfo->priv; > + struct nand_chip *this = mtd_to_nand(mtdinfo); > ulong base = (ulong) this->IO_ADDR_W & 0xffffff00; > uint32_t *p = (uint32_t *) buf; > > @@ -124,7 +124,7 @@ static void ndfc_write_buf(struct mtd_info *mtdinfo, > const uint8_t *buf, int len > static uint8_t ndfc_read_byte(struct mtd_info *mtd) > { > > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > #ifdef CONFIG_SYS_NAND_BUSWIDTH_16BIT > return (uint8_t) readw(chip->IO_ADDR_R); > diff --git a/drivers/mtd/nand/omap_gpmc.c b/drivers/mtd/nand/omap_gpmc.c > index f2ee90e..cac9eea 100644 > --- a/drivers/mtd/nand/omap_gpmc.c > +++ b/drivers/mtd/nand/omap_gpmc.c > @@ -58,8 +58,8 @@ static struct omap_nand_info omap_nand_info[GPMC_MAX_CS]; > static void omap_nand_hwcontrol(struct mtd_info *mtd, int32_t cmd, > uint32_t ctrl) > { > - register struct nand_chip *this = mtd->priv; > - struct omap_nand_info *info = this->priv; > + register struct nand_chip *this = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(this); > int cs = info->cs; > > /* > @@ -85,8 +85,8 @@ static void omap_nand_hwcontrol(struct mtd_info *mtd, > int32_t cmd, > /* Check wait pin as dev ready indicator */ > static int omap_dev_ready(struct mtd_info *mtd) > { > - register struct nand_chip *this = mtd->priv; > - struct omap_nand_info *info = this->priv; > + register struct nand_chip *this = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(this); > return gpmc_cfg->status & (1 << (8 + info->ws)); > } > > @@ -177,8 +177,8 @@ static int __maybe_unused omap_correct_data(struct > mtd_info *mtd, uint8_t *dat, > __maybe_unused > static void omap_enable_hwecc(struct mtd_info *mtd, int32_t mode) > { > - struct nand_chip *nand = mtd->priv; > - struct omap_nand_info *info = nand->priv; > + struct nand_chip *nand = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(nand); > unsigned int dev_width = (nand->options & NAND_BUSWIDTH_16) ? 1 : 0; > unsigned int ecc_algo = 0; > unsigned int bch_type = 0; > @@ -262,8 +262,8 @@ static void omap_enable_hwecc(struct mtd_info *mtd, > int32_t mode) > static int omap_calculate_ecc(struct mtd_info *mtd, const uint8_t *dat, > uint8_t *ecc_code) > { > - struct nand_chip *chip = mtd->priv; > - struct omap_nand_info *info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(chip); > uint32_t *ptr, val = 0; > int8_t i = 0, j; > > @@ -392,7 +392,7 @@ static int __read_prefetch_aligned(struct nand_chip > *chip, uint32_t *buf, int le > { > int ret; > uint32_t cnt; > - struct omap_nand_info *info = chip->priv; > + struct omap_nand_info *info = nand_get_controller_data(chip); > > ret = omap_prefetch_enable(PREFETCH_FIFOTHRESHOLD_MAX, len, 0, > info->cs); > if (ret < 0) > @@ -417,7 +417,7 @@ static int __read_prefetch_aligned(struct nand_chip > *chip, uint32_t *buf, int le > > static inline void omap_nand_read(struct mtd_info *mtd, uint8_t *buf, int > len) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > if (chip->options & NAND_BUSWIDTH_16) > nand_read_buf16(mtd, buf, len); > @@ -429,7 +429,7 @@ static void omap_nand_read_prefetch(struct mtd_info *mtd, > uint8_t *buf, int len) > { > int ret; > uint32_t head, tail; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > /* > * If the destination buffer is unaligned, start with reading > @@ -491,8 +491,8 @@ static void omap_reverse_list(u8 *list, unsigned int > length) > static int omap_correct_data_bch(struct mtd_info *mtd, uint8_t *dat, > uint8_t *read_ecc, uint8_t *calc_ecc) > { > - struct nand_chip *chip = mtd->priv; > - struct omap_nand_info *info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(chip); > struct nand_ecc_ctrl *ecc = &chip->ecc; > uint32_t error_count = 0, error_max; > uint32_t error_loc[ELM_MAX_ERROR_COUNT]; > @@ -652,8 +652,8 @@ static int omap_correct_data_bch_sw(struct mtd_info *mtd, > u_char *data, > int i, count; > /* cannot correct more than 8 errors */ > unsigned int errloc[8]; > - struct nand_chip *chip = mtd->priv; > - struct omap_nand_info *info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(chip); > > count = decode_bch(info->control, NULL, 512, read_ecc, calc_ecc, > NULL, errloc); > @@ -691,8 +691,8 @@ static int omap_correct_data_bch_sw(struct mtd_info *mtd, > u_char *data, > */ > static void __maybe_unused omap_free_bch(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > - struct omap_nand_info *info = chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct omap_nand_info *info = nand_get_controller_data(chip); > > if (info->control) { > free_bch(info->control); > @@ -710,7 +710,7 @@ static void __maybe_unused omap_free_bch(struct mtd_info > *mtd) > */ > static int omap_select_ecc_scheme(struct nand_chip *nand, > enum omap_ecc ecc_scheme, unsigned int pagesize, unsigned int oobsize) { > - struct omap_nand_info *info = nand->priv; > + struct omap_nand_info *info = > nand_get_controller_data(nand); > struct nand_ecclayout *ecclayout = &omap_ecclayout; > int eccsteps = pagesize / SECTOR_BYTES; > int i; > @@ -904,7 +904,7 @@ int __maybe_unused omap_nand_switch_ecc(uint32_t > hardware, uint32_t eccstrength) > } > > mtd = nand_info[nand_curr_device]; > - nand = mtd->priv; > + nand = mtd_to_nand(mtd); > nand->options |= NAND_OWN_BUFFERS; > nand->options &= ~NAND_SUBPAGE_READ; > /* Setup the ecc configurations again */ > @@ -994,7 +994,7 @@ int board_nand_init(struct nand_chip *nand) > omap_nand_info[cs].control = NULL; > omap_nand_info[cs].cs = cs; > omap_nand_info[cs].ws = wscfg[cs]; > - nand->priv = &omap_nand_info[cs]; > + nand_set_controller_data(nand, &omap_nand_info[cs]); > nand->cmd_ctrl = omap_nand_hwcontrol; > nand->options |= NAND_NO_PADDING | NAND_CACHEPRG; > nand->chip_delay = 100; > diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c > index 125dbe7..03bf046 100644 > --- a/drivers/mtd/nand/pxa3xx_nand.c > +++ b/drivers/mtd/nand/pxa3xx_nand.c > @@ -900,7 +900,8 @@ static int prepare_set_command(struct pxa3xx_nand_info > *info, int command, > static void nand_cmdfunc(struct mtd_info *mtd, unsigned command, > int column, int page_addr) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > int exec_cmd; > > @@ -960,7 +961,8 @@ static void nand_cmdfunc_extended(struct mtd_info *mtd, > const unsigned command, > int column, int page_addr) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > int exec_cmd, ext_cmd_type; > > @@ -1091,7 +1093,7 @@ static int pxa3xx_nand_read_page_hwecc(struct mtd_info > *mtd, > struct nand_chip *chip, uint8_t *buf, int oob_required, > int page) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > > chip->read_buf(mtd, buf, mtd->writesize); > @@ -1117,7 +1119,8 @@ static int pxa3xx_nand_read_page_hwecc(struct mtd_info > *mtd, > > static uint8_t pxa3xx_nand_read_byte(struct mtd_info *mtd) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > char retval = 0xFF; > > @@ -1130,7 +1133,8 @@ static uint8_t pxa3xx_nand_read_byte(struct mtd_info > *mtd) > > static u16 pxa3xx_nand_read_word(struct mtd_info *mtd) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > u16 retval = 0xFFFF; > > @@ -1143,7 +1147,8 @@ static u16 pxa3xx_nand_read_word(struct mtd_info *mtd) > > static void pxa3xx_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > int real_len = min_t(size_t, len, info->buf_count - info->buf_start); > > @@ -1154,7 +1159,8 @@ static void pxa3xx_nand_read_buf(struct mtd_info *mtd, > uint8_t *buf, int len) > static void pxa3xx_nand_write_buf(struct mtd_info *mtd, > const uint8_t *buf, int len) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > int real_len = min_t(size_t, len, info->buf_count - info->buf_start); > > @@ -1169,7 +1175,8 @@ static void pxa3xx_nand_select_chip(struct mtd_info > *mtd, int chip) > > static int pxa3xx_nand_waitfunc(struct mtd_info *mtd, struct nand_chip *this) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > > if (info->need_wait) { > @@ -1210,7 +1217,7 @@ static int pxa3xx_nand_config_flash(struct > pxa3xx_nand_info *info) > { > struct pxa3xx_nand_host *host = info->host[info->cs]; > struct mtd_info *mtd = host->mtd; > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > > info->reg_ndcr |= (host->col_addr_cycles == 2) ? NDCR_RA_START : 0; > info->reg_ndcr |= (chip->page_shift == 6) ? NDCR_PG_PER_BLK : 0; > @@ -1262,7 +1269,7 @@ static int pxa3xx_nand_sensing(struct pxa3xx_nand_host > *host) > int ret; > > mtd = info->host[info->cs]->mtd; > - chip = mtd->priv; > + chip = mtd_to_nand(mtd); > > /* configure default flash values */ > info->reg_ndcr = 0x0; /* enable all interrupts */ > @@ -1354,10 +1361,10 @@ static int pxa_ecc_init(struct pxa3xx_nand_info *info, > > static int pxa3xx_nand_scan(struct mtd_info *mtd) > { > - struct pxa3xx_nand_host *host = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct pxa3xx_nand_host *host = nand_get_controller_data(chip); > struct pxa3xx_nand_info *info = host->info_data; > struct pxa3xx_nand_platform_data *pdata = info->pdata; > - struct nand_chip *chip = mtd->priv; > int ret; > uint16_t ecc_strength, ecc_step; > > @@ -1479,14 +1486,13 @@ static int alloc_nand_resource(struct > pxa3xx_nand_info *info) > for (cs = 0; cs < pdata->num_cs; cs++) { > chip = (struct nand_chip *) > ((u8 *)&info[1] + sizeof(*host) * cs); > - mtd = &chip->mtd; > + mtd = nand_to_mtd(chip); > host = (struct pxa3xx_nand_host *)chip; > info->host[cs] = host; > host->mtd = mtd; > host->cs = cs; > host->info_data = info; > host->read_id_bytes = 4; > - mtd->priv = host; > mtd->owner = THIS_MODULE; > > chip->ecc.read_page = pxa3xx_nand_read_page_hwecc; > diff --git a/drivers/mtd/nand/s3c2410_nand.c b/drivers/mtd/nand/s3c2410_nand.c > index b3a2a60..2a0da6e 100644 > --- a/drivers/mtd/nand/s3c2410_nand.c > +++ b/drivers/mtd/nand/s3c2410_nand.c > @@ -31,7 +31,7 @@ > static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) > { > int i; > - struct nand_chip *this = mtd->priv; > + struct nand_chip *this = mtd_to_nand(mtd); > > for (i = 0; i < len; i++) > buf[i] = readb(this->IO_ADDR_R); > @@ -40,7 +40,7 @@ static void nand_read_buf(struct mtd_info *mtd, u_char > *buf, int len) > > static void s3c24x0_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int > ctrl) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct s3c24x0_nand *nand = s3c24x0_get_base_nand(); > > debug("hwcontrol(): 0x%02x 0x%02x\n", cmd, ctrl); > diff --git a/drivers/mtd/nand/tegra_nand.c b/drivers/mtd/nand/tegra_nand.c > index b20fb1e..3eae4cb 100644 > --- a/drivers/mtd/nand/tegra_nand.c > +++ b/drivers/mtd/nand/tegra_nand.c > @@ -143,10 +143,10 @@ static int nand_waitfor_cmd_completion(struct nand_ctlr > *reg) > */ > static uint8_t read_byte(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_drv *info; > > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > > writel(CMD_GO | CMD_PIO | CMD_RX | CMD_CE0 | CMD_A_VALID, > &info->reg->command); > @@ -169,8 +169,8 @@ static void read_buf(struct mtd_info *mtd, uint8_t *buf, > int len) > { > int i, s; > unsigned int reg; > - struct nand_chip *chip = mtd->priv; > - struct nand_drv *info = (struct nand_drv *)chip->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > + struct nand_drv *info = (struct nand_drv > *)nand_get_controller_data(chip); > > for (i = 0; i < len; i += 4) { > s = (len - i) > 4 ? 4 : len - i; > @@ -194,11 +194,11 @@ static void read_buf(struct mtd_info *mtd, uint8_t > *buf, int len) > */ > static int nand_dev_ready(struct mtd_info *mtd) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > int reg_val; > struct nand_drv *info; > > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > > reg_val = readl(&info->reg->status); > if (reg_val & STATUS_RBSY0) > @@ -245,10 +245,10 @@ static void nand_clear_interrupt_status(struct > nand_ctlr *reg) > static void nand_command(struct mtd_info *mtd, unsigned int command, > int column, int page_addr) > { > - struct nand_chip *chip = mtd->priv; > + struct nand_chip *chip = mtd_to_nand(mtd); > struct nand_drv *info; > > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > > /* > * Write out the command to the device. > @@ -512,7 +512,7 @@ static int nand_rw_page(struct mtd_info *mtd, struct > nand_chip *chip, > return -EINVAL; > } > > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > config = &info->config; > if (set_bus_width_page_size(config, ®_val)) > return -EINVAL; > @@ -662,7 +662,7 @@ static int nand_write_page_hwecc(struct mtd_info *mtd, > int page; > struct nand_drv *info; > > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > > page = (readl(&info->reg->addr_reg1) >> 16) | > (readl(&info->reg->addr_reg2) << 16); > @@ -702,7 +702,7 @@ static int nand_write_page_raw(struct mtd_info *mtd, > int page; > struct nand_drv *info; > > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > page = (readl(&info->reg->addr_reg1) >> 16) | > (readl(&info->reg->addr_reg2) << 16); > > @@ -734,7 +734,7 @@ static int nand_rw_oob(struct mtd_info *mtd, struct > nand_chip *chip, > > if (((int)chip->oob_poi) & 0x03) > return -EINVAL; > - info = (struct nand_drv *)chip->priv; > + info = (struct nand_drv *)nand_get_controller_data(chip); > if (set_bus_width_page_size(&info->config, ®_val)) > return -EINVAL; > > @@ -963,7 +963,7 @@ int tegra_nand_init(struct nand_chip *nand, int devnum) > nand->ecc.strength = 1; > nand->select_chip = nand_select_chip; > nand->dev_ready = nand_dev_ready; > - nand->priv = &nand_ctrl; > + nand_set_controller_data(nand, &nand_ctrl); > > /* Disable subpage writes as we do not provide ecc->hwctl */ > nand->options |= NAND_NO_SUBPAGE_WRITE; > @@ -976,8 +976,7 @@ int tegra_nand_init(struct nand_chip *nand, int devnum) > > dm_gpio_set_value(&config->wp_gpio, 1); > > - our_mtd = &nand->mtd; > - our_mtd->priv = nand; > + our_mtd = nand_to_mtd(nand); > ret = nand_scan_ident(our_mtd, CONFIG_SYS_NAND_MAX_CHIPS, NULL); > if (ret) > return ret; > diff --git a/drivers/mtd/nand/vf610_nfc.c b/drivers/mtd/nand/vf610_nfc.c > index 3be8b02..a4d5a62 100644 > --- a/drivers/mtd/nand/vf610_nfc.c > +++ b/drivers/mtd/nand/vf610_nfc.c > @@ -155,8 +155,7 @@ struct vf610_nfc { > enum vf610_nfc_alt_buf alt_buf; > }; > > -#define mtd_to_nfc(_mtd) \ > - (struct vf610_nfc *)((struct nand_chip *)_mtd->priv)->priv > +#define mtd_to_nfc(_mtd) nand_get_controller_data(mtd_to_nand(_mtd)) > > #if defined(CONFIG_SYS_NAND_VF610_NFC_45_ECC_BYTES) > #define ECC_HW_MODE ECC_45_BYTE > @@ -653,9 +652,8 @@ static int vf610_nfc_nand_init(int devnum, void __iomem > *addr) > chip = &nfc->chip; > nfc->regs = addr; > > - mtd = &chip->mtd; > - mtd->priv = chip; > - chip->priv = nfc; > + mtd = nand_to_mtd(chip); > + nand_set_controller_data(chip, nfc); > > if (cfg.width == 16) > chip->options |= NAND_BUSWIDTH_16; > diff --git a/fs/yaffs2/yaffs_uboot_glue.c b/fs/yaffs2/yaffs_uboot_glue.c > index 6d86871..25aa6d1 100644 > --- a/fs/yaffs2/yaffs_uboot_glue.c > +++ b/fs/yaffs2/yaffs_uboot_glue.c > @@ -190,7 +190,7 @@ void cmd_yaffs_devconfig(char *_mp, int flash_dev, > goto err; > } > > - chip = mtd->priv; > + chip = mtd_to_nand(mtd); > > /* Check for any conflicts */ > yaffs_dev_rewind(); > diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h > index fe8ac9d..e1df66b 100644 > --- a/include/linux/mtd/nand.h > +++ b/include/linux/mtd/nand.h > @@ -740,6 +740,26 @@ struct nand_chip { > void *priv; > }; > > +static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd) > +{ > + return container_of(mtd, struct nand_chip, mtd); > +} > + > +static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip) > +{ > + return &chip->mtd; > +} > + > +static inline void *nand_get_controller_data(struct nand_chip *chip) > +{ > + return chip->priv; > +} > + > +static inline void nand_set_controller_data(struct nand_chip *chip, void > *priv) > +{ > + chip->priv = priv; > +} > + > /* > * NAND Flash Manufacturer ID Codes > */ -- Boris Brezillon, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot