From: Peter Ujfalusi <peter.ujfalusi@ti.com>
To: Matt Ranostay <matt@ranostay.consulting>
Cc: Tony Lindgren <tony@atomide.com>,
alsa-devel@alsa-project.org,
Linux OMAP List <linux-omap@vger.kernel.org>
Subject: Re: [PATCH v3] ASoC: omap-mcbsp: Add PM QoS support for McBSP to prevent glitches
Date: Mon, 5 Dec 2016 11:35:04 +0200 [thread overview]
Message-ID: <730ed491-ebe7-86c1-b131-5d9441ae2b7c@ti.com> (raw)
In-Reply-To: <CAJ_EiSToYsRyxKF47WEZjcr5Jb4LC-3x310=JNdA7vSrYNoAdw@mail.gmail.com>
On 12/04/2016 03:33 AM, Matt Ranostay wrote:
>>> + *
>>> + * Also setting of the QoS latency for the FIFO which varies upon the buffer
>>> + * size. Approximately 2.3 milliseconds per FIFO location.
>>> */
>>> void omap_mcbsp_start(struct omap_mcbsp *mcbsp, int tx, int rx)
>>> {
>>> int enable_srg = 0;
>>> + int latency = mcbsp->pdata->buffer_size * 23;
>>
>> I think this is not correct.
>> The McBSP FIFO time depends on the sample rate and on the number of
>> channels the audio is using. With 8KHz mono you have 12 times more time
>> per FIFO element compared to 48KHz stereo.
>>
>> As it has been discussed with Tony we should calculate the QoS latency
>> in hw_params:
>>
>
> Ok yeah missed that part of the thread but it makes sense. Just one
> question should the latency value be only based on the TX FIFO
> threshold? I assume capture and transmit have two different settings.
Yes, I believe we should apply the lowest QoS when both direction is
active. If the second stream needs lower QoS, we should switch to use
that, if it would need longer, we should keep the QoS placed for the
first stream.
>> latency_ms = ((FIFOsize - FIFOthreshold) / channels) * 1000/sampling-rate
>>
>> On OMAP3.McBSP2 for example (44.1KHz, stereo):
>> FIFO threshold 128
>> - DMA request will be triggered when 128 slots are free in the FIFO
>> - at that point we have still 1152 words in the FIFO.
>> - if the C wakeup latency is longer then what it takes to play out the
>> samples from the FIFO (13.06ms), we will drain the FIFO and got underflow.
>> - in this case the QOS should be set as 13.06ms
>>
>> FIFO threshold 1024
>> - DMA request will be triggered when 1024 slots are free in the FIFO
>> - at that point we have still 256 words in the FIFO.
>> - if the C wakeup latency is longer then what it takes to play out the
>> samples from the FIFO (2.9ms), we will drain the FIFO and got underflow.
>> - in this case the QOS should be 2.9ms
>>
>> On other McBSPs with 128 word FIFO the required latency is shorter to ensure
>> we don't drain the FIFO.
>>
>>
>>> u16 w;
>>>
>>> + /* Prevent omap hardware from hitting off between fifo fills */
>>> + if (latency)
>>> + pm_qos_add_request(&mcbsp->pm_qos_req,
>>> + PM_QOS_CPU_DMA_LATENCY, latency);
>>> +
>>> if (mcbsp->st_data)
>>> omap_st_start(mcbsp);
>>>
>>> @@ -731,6 +741,8 @@ void omap_mcbsp_stop(struct omap_mcbsp *mcbsp, int tx, int rx)
>>>
>>> if (mcbsp->st_data)
>>> omap_st_stop(mcbsp);
>>> +
>>> + pm_qos_remove_request(&mcbsp->pm_qos_req);
>>> }
>>>
>>> int omap2_mcbsp_set_clks_src(struct omap_mcbsp *mcbsp, u8 fck_src_id)
>>> @@ -1098,6 +1110,9 @@ int omap_mcbsp_init(struct platform_device *pdev)
>>>
>>> void omap_mcbsp_cleanup(struct omap_mcbsp *mcbsp)
>>> {
>>> + if (pm_qos_request_active(&mcbsp->pm_qos_req))
>>> + pm_qos_remove_request(&mcbsp->pm_qos_req);
>>> +
>>> if (mcbsp->pdata->buffer_size)
>>> sysfs_remove_group(&mcbsp->dev->kobj, &additional_attr_group);
>>>
>>> diff --git a/sound/soc/omap/mcbsp.h b/sound/soc/omap/mcbsp.h
>>> index 61e93b1c185d..e603f33f4082 100644
>>> --- a/sound/soc/omap/mcbsp.h
>>> +++ b/sound/soc/omap/mcbsp.h
>>> @@ -325,6 +325,8 @@ struct omap_mcbsp {
>>> unsigned int in_freq;
>>> int clk_div;
>>> int wlen;
>>> +
>>> + struct pm_qos_request pm_qos_req;
>>> };
>>>
>>> void omap_mcbsp_config(struct omap_mcbsp *mcbsp,
>>>
>>
>> --
>> Péter
--
Péter
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2016-12-05 9:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1480555145-8300-1-git-send-email-matt@ranostay.consulting>
2016-12-02 8:23 ` [PATCH v3] ASoC: omap-mcbsp: Add PM QoS support for McBSP to prevent glitches Peter Ujfalusi
2016-12-02 8:26 ` Peter Ujfalusi
2016-12-04 1:33 ` Matt Ranostay
2016-12-05 9:35 ` Peter Ujfalusi [this message]
2016-12-05 15:30 ` Tony Lindgren
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=730ed491-ebe7-86c1-b131-5d9441ae2b7c@ti.com \
--to=peter.ujfalusi@ti.com \
--cc=alsa-devel@alsa-project.org \
--cc=linux-omap@vger.kernel.org \
--cc=matt@ranostay.consulting \
--cc=tony@atomide.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