From: Lars-Peter Clausen <lars@metafoo.de>
To: Vinod Koul <vinod.koul@intel.com>
Cc: alsa-devel@alsa-project.org, Takashi Iwai <tiwai@suse.de>,
Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>,
dmaengine@vger.kernel.org,
Dan Williams <dan.j.williams@intel.com>
Subject: Re: [PATCH v2 1/6] dma: Indicate residue granularity in dma_slave_caps
Date: Fri, 10 Jan 2014 10:52:22 +0100 [thread overview]
Message-ID: <52CFC2D6.4000204@metafoo.de> (raw)
In-Reply-To: <20140109150832.GI16227@intel.com>
On 01/09/2014 04:08 PM, Vinod Koul wrote:
> On Mon, Jan 06, 2014 at 11:45:57AM +0100, Lars-Peter Clausen wrote:
>> This patch adds a new field to the dma_slave_caps struct which indicates the
>> granularity with which the driver is able to update the residue field of the
>> dma_tx_state struct. Making this information available to dmaengine users allows
>> them to make better decisions on how to operate. E.g. for audio certain features
>> like wakeup less operation or timer based scheduling only make sense and work
>> correctly if the reported residue is fine-grained enough.
>>
>> Right now four different levels of granularity are supported:
>> * DESCRIPTOR: The DMA channel is only able to tell whether a descriptor has
>> been completed or not, which means residue reporting is not supported by
>> this channel. The residue field of the dma_tx_state field will always be
>> 0.
>> * SEGMENT: The DMA channel updates the residue field after each successfully
>> completed segment of the transfer (For cyclic transfers this is after each
>> period). This is typically implemented by having the hardware generate an
>> interrupt after each transferred segment and then the drivers updates the
>> outstanding residue by the size of the segment. Another possibility is if
>> the hardware supports SG and the segment descriptor has a field which gets
>> set after the segment has been completed. The driver then counts the
>> number of segments without the flag set to compute the residue.
>> * BURST: The DMA channel updates the residue field after each transferred
>> burst. This is typically only supported if the hardware has a progress
>> register of some sort (E.g. a register with the current read/write address
>> or a register with the amount of bursts/beats/bytes that have been
>> transferred or still need to be transferred).
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
>> ---
>> Changes since v1:
>> * Drop BYTE granularity level as there has been consent that it is not
>> really useful.
>> ---
>> include/linux/dmaengine.h | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
>> index ed92b30..74d5cb2 100644
>> --- a/include/linux/dmaengine.h
>> +++ b/include/linux/dmaengine.h
>> @@ -364,6 +364,19 @@ struct dma_slave_config {
>> unsigned int slave_id;
>> };
>>
>> +/**
>> + * enum dma_residue_granularity - Granularity of the reported transfer residue
>> + * @DMA_RESIDUE_GRANULATRITY_DESCRIPTOR: Residue reporting is not supported.
>> + * @DMA_RESIDUE_GRANULATRITY_SEGMENT: Residue is updated with each completed
>> + * segment in the descriptor.
>> + * @DMA_RESIDUE_GRANULATRITY_BURST: Residue is updated with each transfered burst
>> + */
>> +enum dma_residue_granularity {
>> + DMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,
>> + DMA_RESIDUE_GRANULARITY_SEGMENT = 1,
>> + DMA_RESIDUE_GRANULARITY_BURST = 2,
> This is too longish macro :) Cna we just have DMA_RESIDUE_XXXX. Do we really
> need granularity?
How about DMA_RSD_GRNLRTY? ;)
I'd prefer to keep the name as it is. In my opinion the intuitive meaning
changes completely if you leave out the "granularity".
>
> Also segment is not too obvious, block is genrally used in DMA controllers for
> this, though not too relgious about it!
>
I'd like to stick with the kernel terminology.
> Can you also add bit more detail in enum descriptions. Move a bit from patch
> description above :)
Ok.
>
>
>> +};
>> +
>> /* struct dma_slave_caps - expose capabilities of a slave channel only
>> *
>> * @src_addr_widths: bit mask of src addr widths the channel supports
>> @@ -374,6 +387,7 @@ struct dma_slave_config {
>> * should be checked by controller as well
>> * @cmd_pause: true, if pause and thereby resume is supported
>> * @cmd_terminate: true, if terminate cmd is supported
>> + * @residue_granularity: granularity of the reported transfer residue
>> */
>> struct dma_slave_caps {
>> u32 src_addr_widths;
>> @@ -381,6 +395,7 @@ struct dma_slave_caps {
>> u32 directions;
>> bool cmd_pause;
>> bool cmd_terminate;
>> + enum dma_residue_granularity residue_granularity;
> enum dma_residue granularity; would be fine too...
>
> --
> ~Vinod
> --
> To unsubscribe from this list: send the line "unsubscribe dmaengine" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2014-01-10 9:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-06 10:45 [PATCH v2 0/6] dma: Indicate residue granularity in dma_slave_caps Lars-Peter Clausen
2014-01-06 10:45 ` [PATCH v2 1/6] " Lars-Peter Clausen
2014-01-09 15:08 ` Vinod Koul
2014-01-10 9:52 ` Lars-Peter Clausen [this message]
2014-01-06 10:45 ` [PATCH v2 2/6] dma: pl330: Set residue_granularity Lars-Peter Clausen
2014-01-06 10:45 ` [PATCH v2 3/6] ASoC: generic-dmaengine-pcm: Check NO_RESIDUE flag at runtime Lars-Peter Clausen
2014-01-06 10:46 ` [PATCH v2 4/6] ASoC: generic-dmaengine-pcm: Check DMA residue granularity Lars-Peter Clausen
2014-01-06 10:46 ` [PATCH v2 5/6] ASoC: axi-{spdif, i2s}: Remove SND_DMAENGINE_PCM_FLAG_NO_RESIDUE flag Lars-Peter Clausen
2014-01-06 10:46 ` [PATCH v2 6/6] ASoC: samsung: " Lars-Peter Clausen
2014-01-07 17:36 ` [PATCH v2 0/6] dma: Indicate residue granularity in dma_slave_caps Mark Brown
2014-01-09 15:18 ` 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=52CFC2D6.4000204@metafoo.de \
--to=lars@metafoo.de \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=dan.j.williams@intel.com \
--cc=dmaengine@vger.kernel.org \
--cc=lgirdwood@gmail.com \
--cc=tiwai@suse.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox