[PATCH] MTD: pxa3xx_nand: fix nand detection issue
Lei Wen
adrian.wenl at gmail.com
Fri Jun 3 11:11:54 EDT 2011
Tested-by: Daniel Mack <zonque at gmail.com>
Also cc to MTD maillist and stable kernel.
On Fri, May 20, 2011 at 12:20 PM, Lei Wen <leiwen at marvell.com> wrote:
> When keep_config is set, the detection would goes different routine.
> That the driver would read out the setting which is set previously
> by bootloader. While most bootloader keep the irq mask as off, and
> current driver need all irq default open, keep_config behavior would
> lead to no irq at all.
>
> Signed-off-by: Lei Wen <leiwen at marvell.com>
> ---
> drivers/mtd/nand/pxa3xx_nand.c | 12 +++++++-----
> 1 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
> index ff07012..9896aef 100644
> --- a/drivers/mtd/nand/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/pxa3xx_nand.c
> @@ -813,7 +813,7 @@ static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
> info->page_size = ndcr & NDCR_PAGE_SZ ? 2048 : 512;
> /* set info fields needed to read id */
> info->read_id_bytes = (info->page_size == 2048) ? 4 : 2;
> - info->reg_ndcr = ndcr;
> + info->reg_ndcr = ndcr & ~NDCR_INT_MASK;
> info->cmdset = &default_cmdset;
>
> info->ndtr0cs0 = nand_readl(info, NDTR0CS0);
> @@ -882,7 +882,7 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
> struct pxa3xx_nand_info *info = mtd->priv;
> struct platform_device *pdev = info->pdev;
> struct pxa3xx_nand_platform_data *pdata = pdev->dev.platform_data;
> - struct nand_flash_dev pxa3xx_flash_ids[2] = { {NULL,}, {NULL,} };
> + struct nand_flash_dev pxa3xx_flash_ids[2], *def = NULL;
> const struct pxa3xx_nand_flash *f = NULL;
> struct nand_chip *chip = mtd->priv;
> uint32_t id = -1;
> @@ -942,8 +942,10 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
> pxa3xx_flash_ids[0].erasesize = f->page_size * f->page_per_block;
> if (f->flash_width == 16)
> pxa3xx_flash_ids[0].options = NAND_BUSWIDTH_16;
> + pxa3xx_flash_ids[1].name = NULL;
> + def = pxa3xx_flash_ids;
> KEEP_CONFIG:
> - if (nand_scan_ident(mtd, 1, pxa3xx_flash_ids))
> + if (nand_scan_ident(mtd, 1, def))
> return -ENODEV;
> /* calculate addressing information */
> info->col_addr_cycles = (mtd->writesize >= 2048) ? 2 : 1;
> @@ -954,9 +956,9 @@ KEEP_CONFIG:
> info->row_addr_cycles = 2;
> mtd->name = mtd_names[0];
> chip->ecc.mode = NAND_ECC_HW;
> - chip->ecc.size = f->page_size;
> + chip->ecc.size = info->page_size;
>
> - chip->options = (f->flash_width == 16) ? NAND_BUSWIDTH_16 : 0;
> + chip->options = (info->reg_ndcr & NDCR_DWIDTH_M) ? NAND_BUSWIDTH_16 : 0;
> chip->options |= NAND_NO_AUTOINCR;
> chip->options |= NAND_NO_READRDY;
>
> --
> 1.7.0.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-mtd
mailing list