Commit 1394a726 authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Boris Brezillon

mtd: nand: denali: use nand_chip to hold frequently accessed data

The denali_init() needs to setup a bunch of parameters of nand_chip.
Replace denali->nand.(member) with chip->(member) for shorter code.
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
parent c5d664aa
...@@ -1405,7 +1405,8 @@ static void denali_drv_init(struct denali_nand_info *denali) ...@@ -1405,7 +1405,8 @@ static void denali_drv_init(struct denali_nand_info *denali)
int denali_init(struct denali_nand_info *denali) int denali_init(struct denali_nand_info *denali)
{ {
struct mtd_info *mtd = nand_to_mtd(&denali->nand); struct nand_chip *chip = &denali->nand;
struct mtd_info *mtd = nand_to_mtd(chip);
int ret; int ret;
if (denali->platform == INTEL_CE4100) { if (denali->platform == INTEL_CE4100) {
...@@ -1442,10 +1443,10 @@ int denali_init(struct denali_nand_info *denali) ...@@ -1442,10 +1443,10 @@ int denali_init(struct denali_nand_info *denali)
mtd->name = "denali-nand"; mtd->name = "denali-nand";
/* register the driver with the NAND core subsystem */ /* register the driver with the NAND core subsystem */
denali->nand.select_chip = denali_select_chip; chip->select_chip = denali_select_chip;
denali->nand.cmdfunc = denali_cmdfunc; chip->cmdfunc = denali_cmdfunc;
denali->nand.read_byte = denali_read_byte; chip->read_byte = denali_read_byte;
denali->nand.waitfunc = denali_waitfunc; chip->waitfunc = denali_waitfunc;
/* /*
* scan for NAND devices attached to the controller * scan for NAND devices attached to the controller
...@@ -1488,17 +1489,16 @@ int denali_init(struct denali_nand_info *denali) ...@@ -1488,17 +1489,16 @@ int denali_init(struct denali_nand_info *denali)
* the real pagesize and anything necessery * the real pagesize and anything necessery
*/ */
denali->devnum = ioread32(denali->flash_reg + DEVICES_CONNECTED); denali->devnum = ioread32(denali->flash_reg + DEVICES_CONNECTED);
denali->nand.chipsize <<= denali->devnum - 1; chip->chipsize <<= denali->devnum - 1;
denali->nand.page_shift += denali->devnum - 1; chip->page_shift += denali->devnum - 1;
denali->nand.pagemask = (denali->nand.chipsize >> chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
denali->nand.page_shift) - 1; chip->bbt_erase_shift += denali->devnum - 1;
denali->nand.bbt_erase_shift += denali->devnum - 1; chip->phys_erase_shift = chip->bbt_erase_shift;
denali->nand.phys_erase_shift = denali->nand.bbt_erase_shift; chip->chip_shift += denali->devnum - 1;
denali->nand.chip_shift += denali->devnum - 1;
mtd->writesize <<= denali->devnum - 1; mtd->writesize <<= denali->devnum - 1;
mtd->oobsize <<= denali->devnum - 1; mtd->oobsize <<= denali->devnum - 1;
mtd->erasesize <<= denali->devnum - 1; mtd->erasesize <<= denali->devnum - 1;
mtd->size = denali->nand.numchips * denali->nand.chipsize; mtd->size = chip->numchips * chip->chipsize;
denali->bbtskipbytes *= denali->devnum; denali->bbtskipbytes *= denali->devnum;
/* /*
...@@ -1508,29 +1508,29 @@ int denali_init(struct denali_nand_info *denali) ...@@ -1508,29 +1508,29 @@ int denali_init(struct denali_nand_info *denali)
*/ */
/* Bad block management */ /* Bad block management */
denali->nand.bbt_td = &bbt_main_descr; chip->bbt_td = &bbt_main_descr;
denali->nand.bbt_md = &bbt_mirror_descr; chip->bbt_md = &bbt_mirror_descr;
/* skip the scan for now until we have OOB read and write support */ /* skip the scan for now until we have OOB read and write support */
denali->nand.bbt_options |= NAND_BBT_USE_FLASH; chip->bbt_options |= NAND_BBT_USE_FLASH;
denali->nand.options |= NAND_SKIP_BBTSCAN; chip->options |= NAND_SKIP_BBTSCAN;
denali->nand.ecc.mode = NAND_ECC_HW_SYNDROME; chip->ecc.mode = NAND_ECC_HW_SYNDROME;
/* no subpage writes on denali */ /* no subpage writes on denali */
denali->nand.options |= NAND_NO_SUBPAGE_WRITE; chip->options |= NAND_NO_SUBPAGE_WRITE;
/* /*
* Denali Controller only support 15bit and 8bit ECC in MRST, * Denali Controller only support 15bit and 8bit ECC in MRST,
* so just let controller do 15bit ECC for MLC and 8bit ECC for * so just let controller do 15bit ECC for MLC and 8bit ECC for
* SLC if possible. * SLC if possible.
* */ * */
if (!nand_is_slc(&denali->nand) && if (!nand_is_slc(chip) &&
(mtd->oobsize > (denali->bbtskipbytes + (mtd->oobsize > (denali->bbtskipbytes +
ECC_15BITS * (mtd->writesize / ECC_15BITS * (mtd->writesize /
ECC_SECTOR_SIZE)))) { ECC_SECTOR_SIZE)))) {
/* if MLC OOB size is large enough, use 15bit ECC*/ /* if MLC OOB size is large enough, use 15bit ECC*/
denali->nand.ecc.strength = 15; chip->ecc.strength = 15;
denali->nand.ecc.bytes = ECC_15BITS; chip->ecc.bytes = ECC_15BITS;
iowrite32(15, denali->flash_reg + ECC_CORRECTION); iowrite32(15, denali->flash_reg + ECC_CORRECTION);
} else if (mtd->oobsize < (denali->bbtskipbytes + } else if (mtd->oobsize < (denali->bbtskipbytes +
ECC_8BITS * (mtd->writesize / ECC_8BITS * (mtd->writesize /
...@@ -1538,24 +1538,24 @@ int denali_init(struct denali_nand_info *denali) ...@@ -1538,24 +1538,24 @@ int denali_init(struct denali_nand_info *denali)
pr_err("Your NAND chip OOB is not large enough to contain 8bit ECC correction codes"); pr_err("Your NAND chip OOB is not large enough to contain 8bit ECC correction codes");
goto failed_req_irq; goto failed_req_irq;
} else { } else {
denali->nand.ecc.strength = 8; chip->ecc.strength = 8;
denali->nand.ecc.bytes = ECC_8BITS; chip->ecc.bytes = ECC_8BITS;
iowrite32(8, denali->flash_reg + ECC_CORRECTION); iowrite32(8, denali->flash_reg + ECC_CORRECTION);
} }
mtd_set_ooblayout(mtd, &denali_ooblayout_ops); mtd_set_ooblayout(mtd, &denali_ooblayout_ops);
denali->nand.ecc.bytes *= denali->devnum; chip->ecc.bytes *= denali->devnum;
denali->nand.ecc.strength *= denali->devnum; chip->ecc.strength *= denali->devnum;
/* override the default read operations */ /* override the default read operations */
denali->nand.ecc.size = ECC_SECTOR_SIZE * denali->devnum; chip->ecc.size = ECC_SECTOR_SIZE * denali->devnum;
denali->nand.ecc.read_page = denali_read_page; chip->ecc.read_page = denali_read_page;
denali->nand.ecc.read_page_raw = denali_read_page_raw; chip->ecc.read_page_raw = denali_read_page_raw;
denali->nand.ecc.write_page = denali_write_page; chip->ecc.write_page = denali_write_page;
denali->nand.ecc.write_page_raw = denali_write_page_raw; chip->ecc.write_page_raw = denali_write_page_raw;
denali->nand.ecc.read_oob = denali_read_oob; chip->ecc.read_oob = denali_read_oob;
denali->nand.ecc.write_oob = denali_write_oob; chip->ecc.write_oob = denali_write_oob;
denali->nand.erase = denali_erase; chip->erase = denali_erase;
ret = nand_scan_tail(mtd); ret = nand_scan_tail(mtd);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment