From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Kamal Dasu <kdasu.kdev@gmail.com>
Cc: Vignesh Raghavendra <vigneshr@ti.com>,
Richard Weinberger <richard@nod.at>,
linux-kernel@vger.kernel.org, Marek Vasut <marek.vasut@gmail.com>,
bcm-kernel-feedback-list@broadcom.com,
linux-mtd@lists.infradead.org,
Brian Norris <computersforpeace@gmail.com>,
David Woodhouse <dwmw2@infradead.org>
Subject: Re: [PATCH 3/3] mtd: rawnand: brcmnand: Add support for flash-edu for dma transfers
Date: Thu, 9 Jan 2020 17:10:14 +0100 [thread overview]
Message-ID: <20200109171014.527e6d5d@xps13> (raw)
In-Reply-To: <20191120182153.29732-3-kdasu.kdev@gmail.com>
Hi Kamal,
Kamal Dasu <kdasu.kdev@gmail.com> wrote on Wed, 20 Nov 2019 13:20:59
-0500:
> Legacy mips soc platforms that have controller v5.0 and 6.0 use
> flash-edu block for dma transfers. This change adds support for
> nand dma transfers using the EDU block.
>
> Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
I don't have the patch 2/3 in my mailbox :-/ Can you please resend with
the right numbering or Cc myself on the 2nd?
Otherwise, minor comments below :)
> ---
> drivers/mtd/nand/raw/brcmnand/brcmnand.c | 269 ++++++++++++++++++++++-
> 1 file changed, 263 insertions(+), 6 deletions(-)
[...]
> +/* edu irq */
> +static irqreturn_t brcmnand_edu_irq(int irq, void *data)
> +{
> + struct brcmnand_controller *ctrl = data;
> +
> + if (ctrl->edu_count) {
> + ctrl->edu_count--;
> + while (!edu_readl(ctrl, EDU_DONE))
> + udelay(1);
> + edu_writel(ctrl, EDU_DONE, 0);
> + (void)edu_readl(ctrl, EDU_DONE);
Why this cast? (and all the others)
> + }
> +
> + if (ctrl->edu_count) {
> + ctrl->edu_dram_addr += FC_BYTES;
> + ctrl->edu_ext_addr += FC_BYTES;
> +
> + edu_writel(ctrl, EDU_DRAM_ADDR, (u32)ctrl->edu_dram_addr);
> + (void)edu_readl(ctrl, EDU_DRAM_ADDR);
> + edu_writel(ctrl, EDU_EXT_ADDR, ctrl->edu_ext_addr);
> + (void)edu_readl(ctrl, EDU_EXT_ADDR);
[...]
>
> @@ -2561,6 +2767,7 @@ int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc)
>
> init_completion(&ctrl->done);
> init_completion(&ctrl->dma_done);
> + init_completion(&ctrl->edu_done);
> nand_controller_init(&ctrl->controller);
> ctrl->controller.ops = &brcmnand_controller_ops;
> INIT_LIST_HEAD(&ctrl->host_list);
> @@ -2650,6 +2857,56 @@ int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc)
> dev_info(dev, "enabling FLASH_DMA\n");
> }
>
> + /* use EDU DMA only no FLASH_DMA present */
> + if (has_flash_dma(ctrl))
> + res = 0;
> + else
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
> + "flash-edu");
Can we simplify this block?
> +
> + if (res) {
What about a dedicated helper to do the EDU configuration only?
> + ctrl->edu_base = devm_ioremap_resource(dev, res);
> + if (IS_ERR(ctrl->edu_base))
> + return PTR_ERR(ctrl->edu_base);
> +
> + ctrl->edu_offsets = edu_regs;
> +
> + edu_writel(ctrl, EDU_CONFIG, EDU_CONFIG_MODE_NAND |
> + EDU_CONFIG_SWAP_CFG);
> + (void)edu_readl(ctrl, EDU_CONFIG);
> +
> + /* initialize edu */
> + edu_writel(ctrl, EDU_ERR_STATUS, 0);
> + edu_writel(ctrl, EDU_DONE, 0);
> + (void)edu_readl(ctrl, EDU_DONE);
> +
> + ctrl->edu_irq = platform_get_irq(pdev, 1);
> + if ((int)ctrl->edu_irq < 0) {
> + dev_warn(dev,
> + "FLASH EDU enabled, using ctlrdy irq\n");
> + } else {
> + ret = devm_request_irq(dev, ctrl->edu_irq,
> + brcmnand_edu_irq, 0,
> + "brcmnand-edu", ctrl);
> + if (ret < 0) {
> + dev_err(dev, "can't allocate IRQ %d: error %d\n",
> + ctrl->edu_irq, ret);
> + return ret;
> + }
> +
> + dev_info(dev, "FLASH EDU enabled using irq %u\n",
> + ctrl->edu_irq);
> + }
> + }
> +
> + /* set the appropriate dma transfer function to call */
> + if (has_flash_dma(ctrl))
> + ctrl->dma_trans = brcmnand_dma_trans;
> + else if (has_edu(ctrl))
> + ctrl->dma_trans = brcmnand_edu_trans;
> + else
> + ctrl->dma_trans = NULL;
> +
> /* Disable automatic device ID config, direct addressing */
> brcmnand_rmw_reg(ctrl, BRCMNAND_CS_SELECT,
> CS_SELECT_AUTO_DEVICE_ID_CFG | 0xff, 0, 0);
Thanks,
Miquèl
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Kamal Dasu <kdasu.kdev@gmail.com>
Cc: linux-mtd@lists.infradead.org,
bcm-kernel-feedback-list@broadcom.com,
linux-kernel@vger.kernel.org,
Brian Norris <computersforpeace@gmail.com>,
Richard Weinberger <richard@nod.at>,
David Woodhouse <dwmw2@infradead.org>,
Marek Vasut <marek.vasut@gmail.com>,
Vignesh Raghavendra <vigneshr@ti.com>
Subject: Re: [PATCH 3/3] mtd: rawnand: brcmnand: Add support for flash-edu for dma transfers
Date: Thu, 9 Jan 2020 17:10:14 +0100 [thread overview]
Message-ID: <20200109171014.527e6d5d@xps13> (raw)
In-Reply-To: <20191120182153.29732-3-kdasu.kdev@gmail.com>
Hi Kamal,
Kamal Dasu <kdasu.kdev@gmail.com> wrote on Wed, 20 Nov 2019 13:20:59
-0500:
> Legacy mips soc platforms that have controller v5.0 and 6.0 use
> flash-edu block for dma transfers. This change adds support for
> nand dma transfers using the EDU block.
>
> Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
I don't have the patch 2/3 in my mailbox :-/ Can you please resend with
the right numbering or Cc myself on the 2nd?
Otherwise, minor comments below :)
> ---
> drivers/mtd/nand/raw/brcmnand/brcmnand.c | 269 ++++++++++++++++++++++-
> 1 file changed, 263 insertions(+), 6 deletions(-)
[...]
> +/* edu irq */
> +static irqreturn_t brcmnand_edu_irq(int irq, void *data)
> +{
> + struct brcmnand_controller *ctrl = data;
> +
> + if (ctrl->edu_count) {
> + ctrl->edu_count--;
> + while (!edu_readl(ctrl, EDU_DONE))
> + udelay(1);
> + edu_writel(ctrl, EDU_DONE, 0);
> + (void)edu_readl(ctrl, EDU_DONE);
Why this cast? (and all the others)
> + }
> +
> + if (ctrl->edu_count) {
> + ctrl->edu_dram_addr += FC_BYTES;
> + ctrl->edu_ext_addr += FC_BYTES;
> +
> + edu_writel(ctrl, EDU_DRAM_ADDR, (u32)ctrl->edu_dram_addr);
> + (void)edu_readl(ctrl, EDU_DRAM_ADDR);
> + edu_writel(ctrl, EDU_EXT_ADDR, ctrl->edu_ext_addr);
> + (void)edu_readl(ctrl, EDU_EXT_ADDR);
[...]
>
> @@ -2561,6 +2767,7 @@ int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc)
>
> init_completion(&ctrl->done);
> init_completion(&ctrl->dma_done);
> + init_completion(&ctrl->edu_done);
> nand_controller_init(&ctrl->controller);
> ctrl->controller.ops = &brcmnand_controller_ops;
> INIT_LIST_HEAD(&ctrl->host_list);
> @@ -2650,6 +2857,56 @@ int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc)
> dev_info(dev, "enabling FLASH_DMA\n");
> }
>
> + /* use EDU DMA only no FLASH_DMA present */
> + if (has_flash_dma(ctrl))
> + res = 0;
> + else
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
> + "flash-edu");
Can we simplify this block?
> +
> + if (res) {
What about a dedicated helper to do the EDU configuration only?
> + ctrl->edu_base = devm_ioremap_resource(dev, res);
> + if (IS_ERR(ctrl->edu_base))
> + return PTR_ERR(ctrl->edu_base);
> +
> + ctrl->edu_offsets = edu_regs;
> +
> + edu_writel(ctrl, EDU_CONFIG, EDU_CONFIG_MODE_NAND |
> + EDU_CONFIG_SWAP_CFG);
> + (void)edu_readl(ctrl, EDU_CONFIG);
> +
> + /* initialize edu */
> + edu_writel(ctrl, EDU_ERR_STATUS, 0);
> + edu_writel(ctrl, EDU_DONE, 0);
> + (void)edu_readl(ctrl, EDU_DONE);
> +
> + ctrl->edu_irq = platform_get_irq(pdev, 1);
> + if ((int)ctrl->edu_irq < 0) {
> + dev_warn(dev,
> + "FLASH EDU enabled, using ctlrdy irq\n");
> + } else {
> + ret = devm_request_irq(dev, ctrl->edu_irq,
> + brcmnand_edu_irq, 0,
> + "brcmnand-edu", ctrl);
> + if (ret < 0) {
> + dev_err(dev, "can't allocate IRQ %d: error %d\n",
> + ctrl->edu_irq, ret);
> + return ret;
> + }
> +
> + dev_info(dev, "FLASH EDU enabled using irq %u\n",
> + ctrl->edu_irq);
> + }
> + }
> +
> + /* set the appropriate dma transfer function to call */
> + if (has_flash_dma(ctrl))
> + ctrl->dma_trans = brcmnand_dma_trans;
> + else if (has_edu(ctrl))
> + ctrl->dma_trans = brcmnand_edu_trans;
> + else
> + ctrl->dma_trans = NULL;
> +
> /* Disable automatic device ID config, direct addressing */
> brcmnand_rmw_reg(ctrl, BRCMNAND_CS_SELECT,
> CS_SELECT_AUTO_DEVICE_ID_CFG | 0xff, 0, 0);
Thanks,
Miquèl
next prev parent reply other threads:[~2020-01-09 16:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-20 18:20 [PATCH 1/3] dt: bindings: brcmnand: Add support for flash-edu Kamal Dasu
2019-11-20 18:20 ` Kamal Dasu
2019-11-20 18:20 ` [PATCH 2/3] arch: mips: brcm: Add 7425 flash-edu support Kamal Dasu
2019-11-20 18:20 ` Kamal Dasu
2019-11-20 18:20 ` [PATCH 3/3] mtd: rawnand: brcmnand: Add support for flash-edu for dma transfers Kamal Dasu
2019-11-20 18:20 ` Kamal Dasu
2020-01-09 16:10 ` Miquel Raynal [this message]
2020-01-09 16:10 ` Miquel Raynal
2019-12-04 19:12 ` [PATCH 1/3] dt: bindings: brcmnand: Add support for flash-edu Rob Herring
2019-12-04 19:12 ` Rob Herring
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=20200109171014.527e6d5d@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=computersforpeace@gmail.com \
--cc=dwmw2@infradead.org \
--cc=kdasu.kdev@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=marek.vasut@gmail.com \
--cc=richard@nod.at \
--cc=vigneshr@ti.com \
/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: link
Be 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.