linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lucas Stach <l.stach@pengutronix.de>
To: "Angus Ainslie (Purism)" <angus@akkea.ca>
Cc: angus.ainslie@puri.sm, Vinod Koul <vkoul@kernel.org>,
	dmaengine@vger.kernel.org, NXP Linux Team <linux-imx@nxp.com>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Daniel Baluta <daniel.baluta@gmail.com>
Subject: Re: [PATCH v3 4/5] dma: imx-sdma: add an index for imx8mq multi sdma devices
Date: Wed, 23 Jan 2019 16:31:54 +0100	[thread overview]
Message-ID: <1548257514.28802.3.camel@pengutronix.de> (raw)
In-Reply-To: <20190123152310.11680-5-angus@akkea.ca>

Hi Angus,

Am Mittwoch, den 23.01.2019, 08:23 -0700 schrieb Angus Ainslie (Purism):
> On i.mx8mq, there are two sdma instances, and the common dma framework
> will get a channel dynamically from any available sdma instance whether
> it's the first sdma device or the second sdma device. Some IPs like
> SAI only work with sdma2 not sdma1. To make sure the sdma channel is from
> the correct sdma device, use an index to match.
> 
> Based on MLK-16104-2 by Robin Gong <yibin.gong@nxp.com>

This relies on the probe order of the devices (which should be treated
as random) for the match to find the right device. This is not
acceptable upstream.

The DT "dmas" property already specifies the correct SDMA device to use
 for a consumer, so the filter function should really match the OF node
of the SDMA device with the node specified in the dmas phandle in order
to pick the right SDMA engine.

Regards,
Lucas

> 
> > Signed-off-by: Angus Ainslie (Purism) <angus@akkea.ca>
> ---
>  drivers/dma/imx-sdma.c                | 12 ++++++++++++
>  include/linux/platform_data/dma-imx.h |  1 +
>  2 files changed, 13 insertions(+)
> 
> diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> index 2e691b1cd0eb..bf3752a6a64f 100644
> --- a/drivers/dma/imx-sdma.c
> +++ b/drivers/dma/imx-sdma.c
> @@ -442,6 +442,7 @@ struct sdma_engine {
> > >  	struct sdma_buffer_descriptor	*bd0;
> >  	/* clock ratio for AHB:SDMA core. 1:1 is 1, 2:1 is 0*/
> > >  	bool				clk_ratio;
> > > +	int				idx;
>  };
>  
>  static int sdma_config_write(struct dma_chan *chan,
> @@ -606,6 +607,8 @@ static const struct of_device_id sdma_dt_ids[] = {
>  };
>  MODULE_DEVICE_TABLE(of, sdma_dt_ids);
>  
> +static int sdma_dev_idx;
> +
> >  #define SDMA_H_CONFIG_DSPDMA	BIT(12) /* indicates if the DSPDMA is used */
> >  #define SDMA_H_CONFIG_RTD_PINS	BIT(11) /* indicates if Real-Time Debug pins are enabled */
> >  #define SDMA_H_CONFIG_ACR	BIT(4)  /* indicates if AHB freq /core freq = 2 or 1 */
> @@ -1934,6 +1937,11 @@ static bool sdma_filter_fn(struct dma_chan *chan, void *fn_param)
> >  	if (!imx_dma_is_general_purpose(chan))
> >  		return false;
>  
> > +	/* return false if it's not the right device */
> > +	if ((sdmac->sdma->drvdata == &sdma_imx8mq)
> > +		&& (sdmac->sdma->idx != data->idx))
> > +		return false;
> +
> >  	sdmac->data = *data;
> >  	chan->private = &sdmac->data;
>  
> @@ -1961,6 +1969,7 @@ static struct dma_chan *sdma_xlate(struct of_phandle_args *dma_spec,
> >  	 * be set to sdmac->event_id1.
> >  	 */
> >  	data.dma_request2 = 0;
> > +	data.idx = sdma->idx;
>  
> >  	return dma_request_channel(mask, sdma_filter_fn, &data);
>  }
> @@ -2149,6 +2158,9 @@ static int sdma_probe(struct platform_device *pdev)
> >  		of_node_put(spba_bus);
> >  	}
>  
> > +	/* There maybe multi sdma devices such as i.mx8mq */
> > +	sdma->idx = sdma_dev_idx++;
> +
> >  	return 0;
>  
>  err_register:
> diff --git a/include/linux/platform_data/dma-imx.h b/include/linux/platform_data/dma-imx.h
> index 7d964e787299..843faf081282 100644
> --- a/include/linux/platform_data/dma-imx.h
> +++ b/include/linux/platform_data/dma-imx.h
> @@ -55,6 +55,7 @@ struct imx_dma_data {
> >  	int dma_request2; /* secondary DMA request line */
> >  	enum sdma_peripheral_type peripheral_type;
> >  	int priority;
> > +	int idx;
>  };
>  
>  static inline int imx_dma_is_ipu(struct dma_chan *chan)

  reply	other threads:[~2019-01-23 15:32 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-20  2:31 [PATCH v2 0/3] dma: imx-sdma: add the sdma engine to the imx8mq Angus Ainslie (Purism)
2019-01-20  2:31 ` [PATCH v2 1/3] dma: imx-sdma: fix NULL pointer de-reference Angus Ainslie (Purism)
2019-01-20  9:54   ` Daniel Baluta
2019-01-20 15:04     ` Angus Ainslie
2019-01-20  2:31 ` [PATCH v2 2/3] dma: imx-sdma: add clock ratio 1:1 check Angus Ainslie (Purism)
2019-01-20  9:58   ` Daniel Baluta
2019-01-20 14:38     ` Angus Ainslie
2019-01-20 18:00       ` Daniel Baluta
2019-01-21  9:17   ` Lucas Stach
2019-01-21 14:43     ` Angus Ainslie
2019-01-20  2:31 ` [PATCH v2 3/3] imx8mq.dtsi: add the sdma nodes Angus Ainslie (Purism)
2019-01-23 15:23 ` [PATCH v3 0/5] dma: imx-sdma: add the sdma engine to the imx8mq Angus Ainslie (Purism)
2019-01-23 15:23   ` [PATCH v3 1/5] dma: imx-sdma: add clock ratio 1:1 check Angus Ainslie (Purism)
2019-01-23 15:43     ` Lucas Stach
2019-01-23 15:23   ` [PATCH v3 2/5] dma: imx-sdma: add imx8mq sdma compatible parts Angus Ainslie (Purism)
2019-01-23 15:23   ` [PATCH v3 3/5] dt-bindings: dma: fsl-imx-sdma: add imx8mq compatible string Angus Ainslie (Purism)
2019-01-23 15:23   ` [PATCH v3 4/5] dma: imx-sdma: add an index for imx8mq multi sdma devices Angus Ainslie (Purism)
2019-01-23 15:31     ` Lucas Stach [this message]
2019-01-23 15:42       ` Angus Ainslie
2019-01-23 15:55         ` Vinod Koul
2019-01-23 15:23   ` [PATCH v3 5/5] imx8mq.dtsi: add the sdma nodes Angus Ainslie (Purism)
2019-01-23 16:50     ` Lucas Stach
2019-01-25  2:55 ` [PATCH v4 0/5] dmaengine: imx-sdma: add the sdma engine to the imx8mq Angus Ainslie (Purism)
2019-01-25  2:55   ` [PATCH v4 1/5] dmaengine: imx-sdma: add clock ratio 1:1 check Angus Ainslie (Purism)
2019-01-25  9:42     ` Lucas Stach
2019-01-25  2:55   ` [PATCH v4 2/5] dmaengine: imx-sdma: add imx8mq sdma compatible parts Angus Ainslie (Purism)
2019-01-25  9:35     ` Lucas Stach
2019-01-25  2:55   ` [PATCH v4 3/5] dt-bindings: dma: fsl-imx-sdma: add fsl,imx8mq to the accepted compatible node Angus Ainslie (Purism)
2019-01-25  9:39     ` Lucas Stach
2019-01-25  2:55   ` [PATCH v4 4/5] dma: imx-sdma: add a test for imx8mq multi sdma devices Angus Ainslie (Purism)
2019-01-25  9:34     ` Lucas Stach
2019-01-25  2:55   ` [PATCH v4 5/5] imx8mq.dtsi: add the sdma nodes Angus Ainslie (Purism)
2019-01-25  9:38     ` Lucas Stach
2019-01-28  6:08 ` [PATCH v5 0/5] dmaengine: imx-sdma: add the sdma engine to the imx8mq Angus Ainslie (Purism)
2019-01-28  6:08   ` [PATCH v5 1/5] dmaengine: imx-sdma: add clock ratio 1:1 check Angus Ainslie (Purism)
2019-01-28  9:29     ` Lucas Stach
2019-01-28  6:08   ` [PATCH v5 2/5] dmaengine: imx-sdma: add imx8mq sdma compatible parts Angus Ainslie (Purism)
2019-01-28  9:32     ` Lucas Stach
2019-01-28  6:08   ` [PATCH v5 3/5] dt-bindings: dma: fsl-imx-sdma: add fsl,imx8mq to the accepted compatible node Angus Ainslie (Purism)
2019-01-28  6:08   ` [PATCH v5 4/5] dmaengine: imx-sdma: add a test for imx8mq multi sdma devices Angus Ainslie (Purism)
2019-01-28  9:33     ` Lucas Stach
2019-01-28  6:08   ` [PATCH v5 5/5] dmaengine: imx-sdma: fix consistent dma test failures Angus Ainslie (Purism)
2019-01-28 16:03 ` [PATCH v6 0/3] dmaengine: imx-sdma: add the sdma engine to the imx8mq Angus Ainslie (Purism)
2019-01-28 16:03   ` [PATCH v6 1/3] dmaengine: imx-sdma: add clock ratio 1:1 check Angus Ainslie (Purism)
2019-01-28 16:03   ` [PATCH v6 2/3] dmaengine: imx-sdma: add a test for imx8mq multi sdma devices Angus Ainslie (Purism)
2019-02-25 13:31     ` Daniel Baluta
2019-01-28 16:03   ` [PATCH v6 3/3] dmaengine: imx-sdma: fix consistent dma test failures Angus Ainslie (Purism)
2019-02-25 17:56   ` [PATCH v6 0/3] dmaengine: imx-sdma: add the sdma engine to the imx8mq Vinod Koul

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=1548257514.28802.3.camel@pengutronix.de \
    --to=l.stach@pengutronix.de \
    --cc=angus.ainslie@puri.sm \
    --cc=angus@akkea.ca \
    --cc=daniel.baluta@gmail.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vkoul@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;
as well as URLs for NNTP newsgroup(s).