From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org, Jerome Anand <jerome.anand@intel.com>
Subject: Re: [PATCH 4/4] ALSA: x86: Refactor PCM process engine
Date: Fri, 3 Feb 2017 17:22:00 -0600 [thread overview]
Message-ID: <e6fec9f8-47ab-3f6a-6c61-774f78e49fb6@linux.intel.com> (raw)
In-Reply-To: <s5h8tpnhw6e.wl-tiwai@suse.de>
On 02/03/2017 02:11 PM, Takashi Iwai wrote:
> On Fri, 03 Feb 2017 20:47:55 +0100,
> Pierre-Louis Bossart wrote:
>> On 2/3/17 10:44 AM, Takashi Iwai wrote:
>>> This is again a big rewrite of the driver; now it touches the code to
>>> process PCM stream transfers.
>>>
>>> The most fundamental change is that now the driver supports more than
>>> four periods. Instead of keeping the same index between the ring
>>> buffers (from A to D) and the PCM buffer periods, now we keep
>>> difference indices for both. Also, for the cases with less periods
>>> than four, we track the head index, too. That is, we now have four
>>> indices: ringbuf_head, pcm_head, ringbuf_filled, and pcm_filled.
>> Well that's not completely right. The DMA can only generate an
>> interrupt once the buffer you submit was played, and with 4
>> descriptors you can't have more than 4 points where interrupts are
>> generated. If you program different values in different descriptors
>> then the notion of periodic hardware interrupts will be lost.
> There is a standard trick such as used for ICH or other drivers.
> With this kind of hardware, the address to be written to each buffer
> descriptor can be changed dynamically while streaming. (BTW, on some
> hardware like HD-audio, it's not allowed, but HD-audio has a larger
> table, so it doesn't matter.)
>
> That is, each BD maps to each period on the PCM buffer, and it moves
> there. A picture like below would illustrate:
>
> At time=0
>
> PCM | 0 | 1 | 2 | 3 | 4 | 5 | .... |n-1|
> BD | A | B | C | D |
>
> At time=1 (period elapsed)
>
> PCM | 0 | 1 | 2 | 3 | 4 | 5 | .... |n-1|
> BD | B | C | D | A |
>
> At time=2
>
> PCM | 0 | 1 | 2 | 3 | 4 | 5 | .... |n-1|
> BD | C | D | A | B |
Yes I thought this was a case of a moving window being used but what
sort of application needs this? I never understood the benefits of
expanding the number of periods, it just forces additional wake-ups for
no good reason. It's really silly from a power perspective.
>
> and so on.
>
> For the case periods < 4, it works other way round:
>
> t=0
> PCM | 0 | 1 |
> BD | A | B | - | - |
>
> t=1
> PCM | 1 | 0 |
> BD | - | B | C | - |
>
> t=2
> PCM | 0 | 1 |
> BD | - | - | C | D |
it can be done this way but I don't believe this is required. I think
you can mark 2 descriptors as invalid and use only two, i.e. to follow
your example you'd loop on A-B. The hardware will loop on the 4
descriptors, ignore the invalid ones and stop if it can't find a valid one.
>
>
>>> By this flexibility, we can use even dmix, which requires 16 periods
>>> as default.
>>>
>>> The buffer size could be up to 20bit, so it's set to that value. But
>>> the pre-allocation is limited to 128k as default. It's because the
>>> chip requires the continuous pages (unfortunately no-SG possible),
>>> thus we don't want too much continuous pages.
>> No, that's not true. You need contiguous regions for each descriptor,
>> but the entire buffer doesn't need to be contiguous.
> Yeah, in theory, it's possible, but it actually doesn't help much with
> only four descriptors. Usually SG buffer management is per page. And
> if we fix the size per descriptor, it won't fit what user-space apps
> want in most cases. So practically it mandates the continuous pages.
>
>
> Takashi
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2017-02-03 23:22 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-03 16:43 [PATCH 0/4] Yet another patchset for LPE audio refactoring Takashi Iwai
2017-02-03 16:43 ` [PATCH 1/4] ALSA: x86: Don't pass SNDRV_PCM_INFO_BATCH flag Takashi Iwai
2017-02-03 19:39 ` Pierre-Louis Bossart
2017-02-03 20:13 ` Takashi Iwai
2017-02-03 23:13 ` Pierre-Louis Bossart
2017-02-04 7:57 ` Takashi Iwai
2017-02-06 19:01 ` Takashi Iwai
2017-02-06 21:27 ` Pierre-Louis Bossart
2017-02-06 21:51 ` Takashi Iwai
2017-02-03 16:43 ` [PATCH 2/4] ALSA: x86: Explicit specify 32bit DMA Takashi Iwai
2017-02-03 16:43 ` [PATCH 3/4] ALSA: x86: Don't check connection in lowlevel accessors Takashi Iwai
2017-02-03 16:44 ` [PATCH 4/4] ALSA: x86: Refactor PCM process engine Takashi Iwai
2017-02-03 19:47 ` Pierre-Louis Bossart
2017-02-03 20:11 ` Takashi Iwai
2017-02-03 23:22 ` Pierre-Louis Bossart [this message]
2017-02-04 7:51 ` Takashi Iwai
2017-02-06 11:22 ` Takashi Iwai
2017-02-06 15:46 ` Pierre-Louis Bossart
2017-02-06 15:54 ` Takashi Iwai
2017-02-06 16:00 ` Pierre-Louis Bossart
2017-02-06 19:07 ` [PATCH 0/4] Yet another patchset for LPE audio refactoring Takashi Iwai
2017-02-06 21:16 ` Pierre-Louis Bossart
2017-02-06 21:45 ` Takashi Iwai
2017-02-06 23:56 ` Pierre-Louis Bossart
2017-02-07 1:22 ` Pierre-Louis Bossart
2017-02-07 6:39 ` Takashi Iwai
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=e6fec9f8-47ab-3f6a-6c61-774f78e49fb6@linux.intel.com \
--to=pierre-louis.bossart@linux.intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=jerome.anand@intel.com \
--cc=tiwai@suse.de \
/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).