From: Miquel Raynal <miquel.raynal@bootlin.com> To: Boris Brezillon <boris.brezillon@bootlin.com>, Richard Weinberger <richard@nod.at>, David Woodhouse <dwmw2@infradead.org>, Brian Norris <computersforpeace@gmail.com>, Marek Vasut <marek.vasut@gmail.com>, Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>, Josh Wu <rainyfeeling@outlook.com>, Kamal Dasu <kdasu.kdev@gmail.com>, Harvey Hunt <harveyhuntnexus@gmail.com>, Stefan Agner <stefan@agner.ch> Cc: linux-mtd@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Miquel Raynal <miquel.raynal@bootlin.com> Subject: [PATCH 50/52] mtd: rawnand: jz4740: convert driver to nand_scan() Date: Fri, 2 Mar 2018 18:03:58 +0100 [thread overview] Message-ID: <20180302170400.6712-51-miquel.raynal@bootlin.com> (raw) In-Reply-To: <20180302170400.6712-1-miquel.raynal@bootlin.com> Two helpers have been added to the core to make ECC-related configuration between the detection phase and the final NAND scan. Use these hooks and convert the driver to just use nand_scan() instead of both nand_scan_ident() and nand_scan_tail(). Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> --- drivers/mtd/nand/raw/jz4740_nand.c | 42 +++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/drivers/mtd/nand/raw/jz4740_nand.c b/drivers/mtd/nand/raw/jz4740_nand.c index 613b00a9604b..740145fd9ff2 100644 --- a/drivers/mtd/nand/raw/jz4740_nand.c +++ b/drivers/mtd/nand/raw/jz4740_nand.c @@ -59,6 +59,7 @@ struct jz_nand { struct nand_chip chip; + struct platform_device *pdev; void __iomem *base; struct resource *mem; @@ -329,8 +330,8 @@ static int jz_nand_detect_bank(struct platform_device *pdev, writel(ctrl, nand->base + JZ_REG_NAND_CTRL); if (chipnr == 0) { - /* Detect first chip. */ - ret = nand_scan_ident(mtd, 1, NULL); + /* Detect the first chip and register it */ + ret = nand_scan(mtd, 1); if (ret) goto notfound_id; @@ -367,6 +368,21 @@ static int jz_nand_detect_bank(struct platform_device *pdev, return ret; } +static int jz_nand_attach_chip(struct nand_chip *chip) +{ + struct mtd_info *mtd = nand_to_mtd(chip); + struct jz_nand *nand = mtd_to_jz_nand(mtd); + struct device *dev = mtd->dev.parent; + struct jz_nand_platform_data *pdata = dev_get_platdata(dev); + + if (pdata && pdata->ident_callback) { + pdata->ident_callback(nand->pdev, mtd, &pdata->partitions, + &pdata->num_partitions); + } + + return 0; +} + static int jz_nand_probe(struct platform_device *pdev) { int ret; @@ -397,6 +413,7 @@ static int jz_nand_probe(struct platform_device *pdev) mtd = nand_to_mtd(chip); mtd->dev.parent = &pdev->dev; mtd->name = "jz4740-nand"; + nand->pdev = pdev; chip->ecc.hwctl = jz_nand_hwctl; chip->ecc.calculate = jz_nand_calculate_ecc_rs; @@ -406,6 +423,7 @@ static int jz_nand_probe(struct platform_device *pdev) chip->ecc.bytes = 9; chip->ecc.strength = 4; chip->ecc.options = NAND_ECC_GENERIC_ERASED_CHECK; + chip->ecc.attach_chip = jz_nand_attach_chip; chip->chip_delay = 50; chip->cmd_ctrl = jz_nand_cmd_ctrl; @@ -450,20 +468,10 @@ static int jz_nand_probe(struct platform_device *pdev) else nand->banks[chipnr] = 0; } + if (chipnr == 0) { dev_err(&pdev->dev, "No NAND chips found\n"); - goto err_iounmap_mmio; - } - - if (pdata && pdata->ident_callback) { - pdata->ident_callback(pdev, mtd, &pdata->partitions, - &pdata->num_partitions); - } - - ret = nand_scan_tail(mtd); - if (ret) { - dev_err(&pdev->dev, "Failed to scan NAND\n"); - goto err_unclaim_banks; + goto err_nand_release; } ret = mtd_device_parse_register(mtd, NULL, NULL, @@ -472,15 +480,13 @@ static int jz_nand_probe(struct platform_device *pdev) if (ret) { dev_err(&pdev->dev, "Failed to add mtd device\n"); - goto err_nand_release; + goto err_unclaim_banks; } dev_info(&pdev->dev, "Successfully registered JZ4740 NAND driver\n"); return 0; -err_nand_release: - nand_release(mtd); err_unclaim_banks: while (chipnr--) { unsigned char bank = nand->banks[chipnr]; @@ -488,6 +494,8 @@ static int jz_nand_probe(struct platform_device *pdev) nand->bank_base[bank - 1]); } writel(0, nand->base + JZ_REG_NAND_CTRL); +err_nand_release: + nand_release(mtd); err_iounmap_mmio: jz_nand_iounmap_resource(nand->mem, nand->base); err_free: -- 2.14.1
WARNING: multiple messages have this Message-ID (diff)
From: miquel.raynal@bootlin.com (Miquel Raynal) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 50/52] mtd: rawnand: jz4740: convert driver to nand_scan() Date: Fri, 2 Mar 2018 18:03:58 +0100 [thread overview] Message-ID: <20180302170400.6712-51-miquel.raynal@bootlin.com> (raw) In-Reply-To: <20180302170400.6712-1-miquel.raynal@bootlin.com> Two helpers have been added to the core to make ECC-related configuration between the detection phase and the final NAND scan. Use these hooks and convert the driver to just use nand_scan() instead of both nand_scan_ident() and nand_scan_tail(). Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> --- drivers/mtd/nand/raw/jz4740_nand.c | 42 +++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/drivers/mtd/nand/raw/jz4740_nand.c b/drivers/mtd/nand/raw/jz4740_nand.c index 613b00a9604b..740145fd9ff2 100644 --- a/drivers/mtd/nand/raw/jz4740_nand.c +++ b/drivers/mtd/nand/raw/jz4740_nand.c @@ -59,6 +59,7 @@ struct jz_nand { struct nand_chip chip; + struct platform_device *pdev; void __iomem *base; struct resource *mem; @@ -329,8 +330,8 @@ static int jz_nand_detect_bank(struct platform_device *pdev, writel(ctrl, nand->base + JZ_REG_NAND_CTRL); if (chipnr == 0) { - /* Detect first chip. */ - ret = nand_scan_ident(mtd, 1, NULL); + /* Detect the first chip and register it */ + ret = nand_scan(mtd, 1); if (ret) goto notfound_id; @@ -367,6 +368,21 @@ static int jz_nand_detect_bank(struct platform_device *pdev, return ret; } +static int jz_nand_attach_chip(struct nand_chip *chip) +{ + struct mtd_info *mtd = nand_to_mtd(chip); + struct jz_nand *nand = mtd_to_jz_nand(mtd); + struct device *dev = mtd->dev.parent; + struct jz_nand_platform_data *pdata = dev_get_platdata(dev); + + if (pdata && pdata->ident_callback) { + pdata->ident_callback(nand->pdev, mtd, &pdata->partitions, + &pdata->num_partitions); + } + + return 0; +} + static int jz_nand_probe(struct platform_device *pdev) { int ret; @@ -397,6 +413,7 @@ static int jz_nand_probe(struct platform_device *pdev) mtd = nand_to_mtd(chip); mtd->dev.parent = &pdev->dev; mtd->name = "jz4740-nand"; + nand->pdev = pdev; chip->ecc.hwctl = jz_nand_hwctl; chip->ecc.calculate = jz_nand_calculate_ecc_rs; @@ -406,6 +423,7 @@ static int jz_nand_probe(struct platform_device *pdev) chip->ecc.bytes = 9; chip->ecc.strength = 4; chip->ecc.options = NAND_ECC_GENERIC_ERASED_CHECK; + chip->ecc.attach_chip = jz_nand_attach_chip; chip->chip_delay = 50; chip->cmd_ctrl = jz_nand_cmd_ctrl; @@ -450,20 +468,10 @@ static int jz_nand_probe(struct platform_device *pdev) else nand->banks[chipnr] = 0; } + if (chipnr == 0) { dev_err(&pdev->dev, "No NAND chips found\n"); - goto err_iounmap_mmio; - } - - if (pdata && pdata->ident_callback) { - pdata->ident_callback(pdev, mtd, &pdata->partitions, - &pdata->num_partitions); - } - - ret = nand_scan_tail(mtd); - if (ret) { - dev_err(&pdev->dev, "Failed to scan NAND\n"); - goto err_unclaim_banks; + goto err_nand_release; } ret = mtd_device_parse_register(mtd, NULL, NULL, @@ -472,15 +480,13 @@ static int jz_nand_probe(struct platform_device *pdev) if (ret) { dev_err(&pdev->dev, "Failed to add mtd device\n"); - goto err_nand_release; + goto err_unclaim_banks; } dev_info(&pdev->dev, "Successfully registered JZ4740 NAND driver\n"); return 0; -err_nand_release: - nand_release(mtd); err_unclaim_banks: while (chipnr--) { unsigned char bank = nand->banks[chipnr]; @@ -488,6 +494,8 @@ static int jz_nand_probe(struct platform_device *pdev) nand->bank_base[bank - 1]); } writel(0, nand->base + JZ_REG_NAND_CTRL); +err_nand_release: + nand_release(mtd); err_iounmap_mmio: jz_nand_iounmap_resource(nand->mem, nand->base); err_free: -- 2.14.1
next prev parent reply other threads:[~2018-03-02 17:03 UTC|newest] Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-03-02 17:03 [PATCH 00/52] Allow dynamic allocations during NAND chip identification phase Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 01/52] mtd: rawnand: add hooks that may be called during nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-15 15:24 ` Boris Brezillon 2018-03-15 15:24 ` Boris Brezillon 2018-03-02 17:03 ` [PATCH 02/52] mtd: rawnand: bf5xx: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-15 15:23 ` Boris Brezillon 2018-03-15 15:23 ` Boris Brezillon 2018-03-02 17:03 ` [PATCH 03/52] mtd: rawnand: bf5xx: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 04/52] mtd: rawnand: brcmnand: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 05/52] mtd: rawnand: brcmnand: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 06/52] mtd: rawnand: cafe: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 07/52] mtd: rawnand: cafe: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 08/52] mtd: rawnand: davinci: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 09/52] mtd: rawnand: davinci: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 10/52] mtd: rawnand: denali: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 11/52] mtd: rawnand: denali: convert to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 12/52] mtd: rawnand: fsl_elbc: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 13/52] mtd: rawnand: fsl_elbc: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 14/52] mtd: rawnand: fsl_ifc: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 15/52] mtd: rawnand: fsl_ifc: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 16/52] mtd: rawnand: fsmc: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 17/52] mtd: rawnand: fsmc: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 18/52] mtd: rawnand: gpmi: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 19/52] mtd: rawnand: hisi504: enhance the probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 20/52] mtd: rawnand: hisi504: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 21/52] mtd: rawnand: jz4780: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-15 15:40 ` Harvey Hunt 2018-03-15 15:40 ` Harvey Hunt 2018-03-16 13:38 ` Miquel Raynal 2018-03-16 13:38 ` Miquel Raynal 2018-03-16 15:33 ` Harvey Hunt 2018-03-16 15:33 ` Harvey Hunt 2018-03-20 7:24 ` Miquel Raynal 2018-03-20 7:24 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 22/52] mtd: rawnand: lpc32xx_mlc: enhance the probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 23/52] mtd: rawnand: lpc32xx_mlc: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 24/52] mtd: rawnand: lpc32xx_slc: enhance the probe function error Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 25/52] mtd: rawnand: lpc32xx_slc: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 26/52] mtd: rawnand: marvell: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 27/52] mtd: rawnand: mtk: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 28/52] mtd: rawnand: mxc: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 29/52] mtd: rawnand: mxc: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 30/52] mtd: rawnand: nandsim: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 31/52] mtd: rawnand: omap2: fix the probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 32/52] mtd: rawnand: omap2: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 33/52] mtd: rawnand: s3c2410: enhance the probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 34/52] mtd: rawnand: s3c2410: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 35/52] mtd: rawnand: sh_flctl: move all NAND chip related setup in one function Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 36/52] mtd: rawnand: sh_flctl: fix the probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 37/52] mtd: rawnand: sh_flctl: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 38/52] mtd: rawnand: sunxi: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 39/52] mtd: rawnand: tango: fix probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 40/52] mtd: rawnand: tango: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 41/52] mtd: rawnand: txx9ndfmc: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 42/52] mtd: rawnand: vf610: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 43/52] mtd: rawnand: atmel: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 44/52] mtd: rawnand: add a field in nand_chip to fill an array of IDs Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 45/52] mtd: rawnand: sm_common: make use of the new flash_ids table entry Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 46/52] mtd: rawnand: sm_common: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 47/52] mtd: rawnand: docg4: fix the probe function error path Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 48/52] mtd: rawnand: docg4: convert driver to nand_scan() Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` [PATCH 49/52] mtd: rawnand: qcom: " Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal [this message] 2018-03-02 17:03 ` [PATCH 50/52] mtd: rawnand: jz4740: " Miquel Raynal 2018-03-02 17:03 ` [PATCH 51/52] mtd: rawnand: do not export nand_scan_[ident|tail]() anymore Miquel Raynal 2018-03-02 17:03 ` Miquel Raynal 2018-03-02 17:04 ` [PATCH 52/52] mtd: rawnand: allocate dynamically ONFI parameters during detection Miquel Raynal 2018-03-02 17:04 ` Miquel Raynal 2018-03-15 15:19 ` [PATCH 00/52] Allow dynamic allocations during NAND chip identification phase Boris Brezillon 2018-03-15 15:19 ` Boris Brezillon
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180302170400.6712-51-miquel.raynal@bootlin.com \ --to=miquel.raynal@bootlin.com \ --cc=boris.brezillon@bootlin.com \ --cc=computersforpeace@gmail.com \ --cc=cyrille.pitchen@wedev4u.fr \ --cc=dwmw2@infradead.org \ --cc=harveyhuntnexus@gmail.com \ --cc=kdasu.kdev@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-mtd@lists.infradead.org \ --cc=marek.vasut@gmail.com \ --cc=rainyfeeling@outlook.com \ --cc=richard@nod.at \ --cc=stefan@agner.ch \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.