All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Peter Ujfalusi <peter.ujfalusi@ti.com>
Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org,
	linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	dmaengine@vger.kernel.org,
	davinci-linux-open-source@linux.davincidsp.com, joelf@ti.com,
	nsekhar@ti.com, Liam Girdwood <lgirdwood@gmail.com>,
	Jyri Sarha <jsarha@ti.com>, Tony Lindgren <tony@atomide.com>,
	Mark Brown <broonie@kernel.org>,
	mporter@linaro.org, dan.j.williams@intel.com,
	vinod.koul@intel.com
Subject: Re: [alsa-devel] [PATCH 14/18] ASoC: davinci: Add edma dmaengine platform driver
Date: Thu, 13 Mar 2014 11:28:05 +0100	[thread overview]
Message-ID: <53218835.3080909@metafoo.de> (raw)
In-Reply-To: <1394702320-21743-15-git-send-email-peter.ujfalusi@ti.com>

On 03/13/2014 10:18 AM, Peter Ujfalusi wrote:
[...]
> +static const struct snd_pcm_hardware edma_pcm_hardware = {
> +	.info			= SNDRV_PCM_INFO_MMAP |
> +				  SNDRV_PCM_INFO_MMAP_VALID |
> +				  SNDRV_PCM_INFO_BATCH |
> +				  SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME |
> +				  SNDRV_PCM_INFO_INTERLEAVED,
> +	.buffer_bytes_max	= 128 * 1024,
> +	.period_bytes_min	= 32,
> +	.period_bytes_max	= 64 * 1024,
> +	.periods_min		= 2,
> +	.periods_max		= 19, /* Limit by edma dmaengine driver */
> +};

The idea is that we can auto-discover all the things using the 
dma_slave_caps API. Too bad we removed the possibility to specify the 
maximum number of segments from the API. Maybe we need to add it back. Is 
the 19 a hard-limit or could it be worked around by software in the 
dmaengine driver?

> +
> +static const struct snd_dmaengine_pcm_config edma_dmaengine_pcm_config = {
> +	.pcm_hardware = &edma_pcm_hardware,
> +	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
> +	.prealloc_buffer_size = 128 * 1024,

Unless there is a very good reason for exactly this size, just leave it 0 
and let the generic dmaengine driver use the default.

> +};
> +
> +static const struct snd_dmaengine_pcm_config edma_compat_dmaengine_pcm_config = {
> +	.pcm_hardware = &edma_pcm_hardware,
> +	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
> +	.compat_filter_fn = edma_filter_fn,
> +	.prealloc_buffer_size = 128 * 1024,
> +};

There is no need for different configs for DT and non-DT.

> +
> +int edma_pcm_platform_register(struct device *dev)
> +{
> +	if (dev->of_node)
> +		return snd_dmaengine_pcm_register(dev,
> +					&edma_dmaengine_pcm_config,
> +					SND_DMAENGINE_PCM_FLAG_NO_RESIDUE);

Since the edma dmaengine driver implements the slave cap API there is no 
need to manually specify SND_DMAENGINE_PCM_FLAG_NO_RESIDUE manually. But 
since the edma driver sets the granularity to 
DMA_RESIDUE_GRANULARITY_DESCRIPTOR in this case the generic dmaengine will 
not set SND_DMAENGINE_PCM_FLAG_NO_RESIDUE automatically since it assumes 
that the dmaengine driver is capable of properly reporting the DMA position.

> +	else
> +		return snd_dmaengine_pcm_register(dev,
> +					&edma_compat_dmaengine_pcm_config,
> +					SND_DMAENGINE_PCM_FLAG_NO_RESIDUE |
> +					SND_DMAENGINE_PCM_FLAG_NO_DT |
> +					SND_DMAENGINE_PCM_FLAG_COMPAT);


If you set the flags to just SND_DMAENGINE_PCM_FLAG_COMPAT it will do the 
right thing in the generic dmaengine driver depending on whether 
dev->of_node is set or not.


There is also a devm_ version of snd_dmaengine_pcm_register() it probably 
makes sense to use it here.

WARNING: multiple messages have this Message-ID (diff)
From: lars@metafoo.de (Lars-Peter Clausen)
To: linux-arm-kernel@lists.infradead.org
Subject: [alsa-devel] [PATCH 14/18] ASoC: davinci: Add edma dmaengine platform driver
Date: Thu, 13 Mar 2014 11:28:05 +0100	[thread overview]
Message-ID: <53218835.3080909@metafoo.de> (raw)
In-Reply-To: <1394702320-21743-15-git-send-email-peter.ujfalusi@ti.com>

On 03/13/2014 10:18 AM, Peter Ujfalusi wrote:
[...]
> +static const struct snd_pcm_hardware edma_pcm_hardware = {
> +	.info			= SNDRV_PCM_INFO_MMAP |
> +				  SNDRV_PCM_INFO_MMAP_VALID |
> +				  SNDRV_PCM_INFO_BATCH |
> +				  SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME |
> +				  SNDRV_PCM_INFO_INTERLEAVED,
> +	.buffer_bytes_max	= 128 * 1024,
> +	.period_bytes_min	= 32,
> +	.period_bytes_max	= 64 * 1024,
> +	.periods_min		= 2,
> +	.periods_max		= 19, /* Limit by edma dmaengine driver */
> +};

The idea is that we can auto-discover all the things using the 
dma_slave_caps API. Too bad we removed the possibility to specify the 
maximum number of segments from the API. Maybe we need to add it back. Is 
the 19 a hard-limit or could it be worked around by software in the 
dmaengine driver?

> +
> +static const struct snd_dmaengine_pcm_config edma_dmaengine_pcm_config = {
> +	.pcm_hardware = &edma_pcm_hardware,
> +	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
> +	.prealloc_buffer_size = 128 * 1024,

Unless there is a very good reason for exactly this size, just leave it 0 
and let the generic dmaengine driver use the default.

> +};
> +
> +static const struct snd_dmaengine_pcm_config edma_compat_dmaengine_pcm_config = {
> +	.pcm_hardware = &edma_pcm_hardware,
> +	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
> +	.compat_filter_fn = edma_filter_fn,
> +	.prealloc_buffer_size = 128 * 1024,
> +};

There is no need for different configs for DT and non-DT.

> +
> +int edma_pcm_platform_register(struct device *dev)
> +{
> +	if (dev->of_node)
> +		return snd_dmaengine_pcm_register(dev,
> +					&edma_dmaengine_pcm_config,
> +					SND_DMAENGINE_PCM_FLAG_NO_RESIDUE);

Since the edma dmaengine driver implements the slave cap API there is no 
need to manually specify SND_DMAENGINE_PCM_FLAG_NO_RESIDUE manually. But 
since the edma driver sets the granularity to 
DMA_RESIDUE_GRANULARITY_DESCRIPTOR in this case the generic dmaengine will 
not set SND_DMAENGINE_PCM_FLAG_NO_RESIDUE automatically since it assumes 
that the dmaengine driver is capable of properly reporting the DMA position.

> +	else
> +		return snd_dmaengine_pcm_register(dev,
> +					&edma_compat_dmaengine_pcm_config,
> +					SND_DMAENGINE_PCM_FLAG_NO_RESIDUE |
> +					SND_DMAENGINE_PCM_FLAG_NO_DT |
> +					SND_DMAENGINE_PCM_FLAG_COMPAT);


If you set the flags to just SND_DMAENGINE_PCM_FLAG_COMPAT it will do the 
right thing in the generic dmaengine driver depending on whether 
dev->of_node is set or not.


There is also a devm_ version of snd_dmaengine_pcm_register() it probably 
makes sense to use it here.

  reply	other threads:[~2014-03-13 10:28 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-13  9:18 [PATCH 00/18] edma/ASoC: dmaengine PCM for AM335x and AM447x Peter Ujfalusi
2014-03-13  9:18 ` Peter Ujfalusi
2014-03-13  9:18 ` Peter Ujfalusi
     [not found] ` <1394702320-21743-1-git-send-email-peter.ujfalusi-l0cyMroinI0@public.gmane.org>
2014-03-13  9:18   ` [PATCH 01/18] platform_data: edma: Be precise with the paRAM struct Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18   ` [PATCH 02/18] dma: edma: Add support for DMA_PAUSE/RESUME operation Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18   ` [PATCH 03/18] dma: edma: Set DMA_CYCLIC capability flag Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18   ` [PATCH 09/18] dma: edma: Simplify direction configuration in edma_config_pset() Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18     ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 04/18] arm: common: edma: Select event queue 1 as default when booted with DT Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 05/18] arm: common: edma: Save the number of event queues/TCs Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 06/18] arm: common: edma: API to request non default queue for a channel Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 07/18] DMA: edma: Use different eventq for cyclic channels Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 08/18] dma: edma: Implement device_slave_caps callback Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 10/18] dma: edma: Reduce debug print verbosity for non verbose debugging Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13 12:53   ` Shevchenko, Andriy
2014-03-13 12:53     ` Shevchenko, Andriy
2014-03-13 12:53     ` Shevchenko, Andriy
     [not found]     ` <1394715211.28803.239.camel-XvqNBM/wLWRrdx17CPfAsdBPR1lH4CV8@public.gmane.org>
2014-03-13 13:37       ` Peter Ujfalusi
2014-03-13 13:37         ` Peter Ujfalusi
2014-03-13 13:37         ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 11/18] dma: edma: Prefix debug prints where the text were identical in prep callbacks Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 12/18] dma: edma: Add channel number to debug prints Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 13/18] dma: edma: Print the direction value as well when it is not supported Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13 13:03   ` Shevchenko, Andriy
2014-03-13 13:03     ` Shevchenko, Andriy
2014-03-13 13:03     ` Shevchenko, Andriy
2014-03-13 13:40     ` Peter Ujfalusi
2014-03-13 13:40       ` [alsa-devel] " Peter Ujfalusi
2014-03-13 13:40       ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 14/18] ASoC: davinci: Add edma dmaengine platform driver Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13 10:28   ` Lars-Peter Clausen [this message]
2014-03-13 10:28     ` [alsa-devel] " Lars-Peter Clausen
     [not found]     ` <53218835.3080909-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2014-03-13 11:56       ` Peter Ujfalusi
2014-03-13 11:56         ` Peter Ujfalusi
2014-03-13 11:56         ` Peter Ujfalusi
2014-03-13 12:09         ` Lars-Peter Clausen
2014-03-13 12:09           ` Lars-Peter Clausen
2014-03-13 13:03     ` Peter Ujfalusi
2014-03-13 13:03       ` [alsa-devel] " Peter Ujfalusi
2014-03-13 13:03       ` Peter Ujfalusi
2014-03-13 13:38       ` Lars-Peter Clausen
2014-03-13 13:38         ` [alsa-devel] " Lars-Peter Clausen
2014-03-13 13:38         ` Lars-Peter Clausen
2014-03-13  9:18 ` [PATCH 15/18] ASoC: davinci-mcasp: Use dmaengine based platform driver for AM335x/447x Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 16/18] ASoC: davinci-mcasp: Provide correct filter_data for dmaengine for non-DT boot Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 17/18] ASoC: davinci-mcasp: Assign the dma_data earlier in dai_probe callback Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18 ` [PATCH 18/18] ASoC: davinci-mcasp: Place constraint on the period size based on FIFO config Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13  9:18   ` Peter Ujfalusi
2014-03-13 13:46 ` [PATCH 00/18] edma/ASoC: dmaengine PCM for AM335x and AM447x Mark Brown
2014-03-13 13:46   ` Mark Brown
2014-03-14  9:38   ` Peter Ujfalusi
2014-03-14  9:38     ` Peter Ujfalusi
2014-03-14  9:38     ` Peter Ujfalusi
2014-03-14 10:13     ` Mark Brown
2014-03-14 10:13       ` Mark Brown

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=53218835.3080909@metafoo.de \
    --to=lars@metafoo.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=dan.j.williams@intel.com \
    --cc=davinci-linux-open-source@linux.davincidsp.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=joelf@ti.com \
    --cc=jsarha@ti.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=mporter@linaro.org \
    --cc=nsekhar@ti.com \
    --cc=peter.ujfalusi@ti.com \
    --cc=tony@atomide.com \
    --cc=vinod.koul@intel.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.