[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <be0a18e8-8ee6-4d4e-6dcc-6ba6e39033c9@ti.com>
Date: Mon, 5 Nov 2018 09:55:24 +0530
From: Kishon Vijay Abraham I <kishon@...com>
To: Chunyan Zhang <zhang.chunyan@...aro.org>,
Ulf Hansson <ulf.hansson@...aro.org>,
Adrian Hunter <adrian.hunter@...el.com>
CC: <linux-mmc@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
Arnd Bergmann <arnd@...db.de>, Mark Brown <broonie@...nel.org>,
Sekhar Nori <nsekhar@...com>,
Chunyan Zhang <zhang.lyra@...il.com>
Subject: Re: [PATCH RFC 2/3] mmc: sdhci-omap: Add using external dma
Hi,
On 05/11/18 8:46 AM, Chunyan Zhang wrote:
> sdhci-omap can support both external dma controllers via dmaengine
> framework as well as ADMA in which the controller acts as DMA master.
>
> Signed-off-by: Chunyan Zhang <zhang.chunyan@...aro.org>
> ---
> drivers/mmc/host/sdhci-omap.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/mmc/host/sdhci-omap.c b/drivers/mmc/host/sdhci-omap.c
> index 88347ce..0a8162c 100644
> --- a/drivers/mmc/host/sdhci-omap.c
> +++ b/drivers/mmc/host/sdhci-omap.c
> @@ -896,6 +896,7 @@ static int sdhci_omap_probe(struct platform_device *pdev)
> const struct of_device_id *match;
> struct sdhci_omap_data *data;
> const struct soc_device_attribute *soc;
> + struct resource *regs;
>
> match = of_match_device(omap_sdhci_match, dev);
> if (!match)
> @@ -908,6 +909,10 @@ static int sdhci_omap_probe(struct platform_device *pdev)
> }
> offset = data->offset;
>
> + regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!regs)
> + return -ENXIO;
> +
> host = sdhci_pltfm_init(pdev, &sdhci_omap_pdata,
> sizeof(*omap_host));
> if (IS_ERR(host)) {
> @@ -924,6 +929,7 @@ static int sdhci_omap_probe(struct platform_device *pdev)
> omap_host->timing = MMC_TIMING_LEGACY;
> omap_host->flags = data->flags;
> host->ioaddr += offset;
> + host->mapbase = regs->start;
>
> mmc = host->mmc;
> sdhci_get_of_property(pdev);
> @@ -991,6 +997,7 @@ static int sdhci_omap_probe(struct platform_device *pdev)
> host->mmc_host_ops.execute_tuning = sdhci_omap_execute_tuning;
> host->mmc_host_ops.enable_sdio_irq = sdhci_omap_enable_sdio_irq;
>
> + sdhci_switch_extdma(host, true);
A number of devices using sdhci-omap supports ADMA. So switching to external
DMA shouldn't be unconditional.
IMHO sdhci.c should see if the device supports ADMA or SDMA. If not it should
try switching to external DMA and if external DMA too is not supported, it
should use PIO.
Thanks
Kishon
Powered by blists - more mailing lists