SUPERH platform development
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH 7/8 v2] ASoC: fsi: remove slave_id settings for DMAEngine
Date: Tue, 20 Jan 2015 13:02:39 +0000	[thread overview]
Message-ID: <4060965.ckzs3UAxrx@wuerfel> (raw)
In-Reply-To: <87bnluaxtt.wl%kuninori.morimoto.gx@renesas.com>

On Tuesday 20 January 2015 04:18:17 Kuninori Morimoto wrote:
> diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
> index 8869971..c4eb234 100644
> --- a/sound/soc/sh/fsi.c
> +++ b/sound/soc/sh/fsi.c
> @@ -1374,10 +1374,9 @@ static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io, struct dev
>                                 shdma_chan_filter, (void *)io->dma_id,
>                                 dev, is_play ? "tx" : "rx");
>         if (io->chan) {
> -               struct dma_slave_config cfg;
> +               struct dma_slave_config cfg = {};
>                 int ret;
>  
> -               cfg.slave_id    = io->dma_id;
>                 cfg.dst_addr    = 0; /* use default addr */
>                 cfg.src_addr    = 0; /* use default addr */
>                 cfg.direction   = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;

As the dma_slave_config structure is now initialized to all-zeroes, the
two address assignments are not strictly required any more.

However, I also suspect that that particular initialization to zero
is also incorrect: When booting with DT, the dst_addr/src_addr fields
are no longer passed in the platform data for the DMA engine but
are expected to be set by the slave driver.

Also set the correct address width, which has the same problem.

	Arnd

8<---
ASoC: fsi: use correct FIFO address for DMA

Passing the FIFO address using platform data is deprecated and does
not work with devicetree due to the lack of that platform data, so
the fsi driver should instead fill the correct address itself.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index b87b22e88e43..9d5f1f7d0b8c 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -250,6 +250,7 @@ struct fsi_clk {
 
 struct fsi_priv {
 	void __iomem *base;
+	resource_size_t phys;
 	struct fsi_master *master;
 
 	struct fsi_stream playback;
@@ -294,6 +295,7 @@ struct fsi_core {
 
 struct fsi_master {
 	void __iomem *base;
+	resource_size_t phys;
 	struct fsi_priv fsia;
 	struct fsi_priv fsib;
 	const struct fsi_core *core;
@@ -1375,8 +1377,10 @@ static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io, struct dev
 		int ret;
 
 		cfg.slave_id	= io->dma_id;
-		cfg.dst_addr	= 0; /* use default addr */
-		cfg.src_addr	= 0; /* use default addr */
+		cfg.dst_addr	= is_play ? fsi->phys + REG_DODT : 0;
+		cfg.src_addr	= is_play ? 0 : fsi->phys + REG_DIDT;
+		cfg.dst_addr_width = is_play ? DMA_SLAVE_BUSWIDTH_4_BYTES : 0;
+		cfg.src_addr_width = is_play ? 0 : DMA_SLAVE_BUSWIDTH_4_BYTES;
 		cfg.direction	= is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
 
 		ret = dmaengine_slave_config(io->chan, &cfg);
@@ -1929,6 +1931,7 @@ static int fsi_probe(struct platform_device *pdev)
 
 	master->base = devm_ioremap_nocache(&pdev->dev,
 					    res->start, resource_size(res));
+	master->phys = res->start;
 	if (!master->base) {
 		dev_err(&pdev->dev, "Unable to ioremap FSI registers.\n");
 		return -ENXIO;
@@ -1941,6 +1944,7 @@ static int fsi_probe(struct platform_device *pdev)
 	/* FSI A setting */
 	fsi		= &master->fsia;
 	fsi->base	= master->base;
+	fsi->phys	= master->phys;
 	fsi->master	= master;
 	fsi_port_info_init(fsi, &info.port_a);
 	fsi_handler_init(fsi, &info.port_a);
@@ -1953,6 +1957,7 @@ static int fsi_probe(struct platform_device *pdev)
 	/* FSI B setting */
 	fsi		= &master->fsib;
 	fsi->base	= master->base + 0x40;
+	fsi->phys	= master->phys + 0x40;
 	fsi->master	= master;
 	fsi_port_info_init(fsi, &info.port_b);
 	fsi_handler_init(fsi, &info.port_b);


  reply	other threads:[~2015-01-20 13:02 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-20  4:18 [PATCH 7/8 v2] ASoC: fsi: remove slave_id settings for DMAEngine Kuninori Morimoto
2015-01-20 13:02 ` Arnd Bergmann [this message]
2015-01-21  1:33 ` Kuninori Morimoto
2015-01-21  9:15 ` Arnd Bergmann
2015-01-22  1:08 ` Kuninori Morimoto
2015-01-22  1:24 ` Kuninori Morimoto
2015-01-22  9:43 ` Arnd Bergmann

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=4060965.ckzs3UAxrx@wuerfel \
    --to=arnd@arndb.de \
    --cc=linux-sh@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox