[alsa-devel] Dice packet sequence quirk and ALSA firewire stack in Linux 4.6

Takashi Sakamoto o-takashi at sakamocchi.jp
Fri May 6 01:59:14 CEST 2016


Hi all,

In this developing cycle for Linux 4.7, I concentrate on working to
check packet sequence of ALSA firewire stack, because I ensure that the
stack causes Dice-based models to generate sound including periodical
noise or to generate no sound in the worst case. As of the end of
developing cycle for Linux 4.6, I assumed that this is a bug of ALSA
firewire stack[1]. However, the assumption is denied by my analysis
with added tracepoints of Linux tracing framework[2]. Then, I concluded
that the issue comes from quirks of Dice in an aspect of processing
presentation timestamp.

I'm under further investigation and have seen some of the quirks. In
this message, I describe the summary of superficial issues from the
quirks, the status of ALSA firewire stack in Linux 4.6 for Dice-based
models and direction of my work for ALSA firewire stack in this
developing cycle.

Besides, resources and my memo for this work is available in this URL.
I wish to upload it to alsa-project.org, not in my server:
http://sakamocchi.jp/media/20160505-dice-packet-dump.tar.xz
(233MB archive file compressed by xz, expands 6.7 GB text files.)


Summary
 - Dice ASICs/firmwares/drivers communicate with packet sequences which
   is partly not compliant to IEC 61883-6.
   - Dice ASICs/firmwares/drivers doesn't sometimes transfer data
     blocks as the same as sampling transfer frequency.
   - Calculation of presentation timestamp is not based on duration of
     data blocks in a packet. This way is different from implementation
     of ALSA firewire stack.
   - The value of estimated 'transfer delay' is against IEEE 1394 spec.

As a result:
 - ALSA dice driver causes these issues. ALSA dice driver in Linux
   kernels since 3.13 have included this issue.
 - To fix this issue, ALSA firewire stack require timestamp generator
   and data block calculator specific for Dice-based models. At least,
   three functions should be changed; amdtp_stream_start(),
   calculate_data_blocks(), calculate_syt() in
   'sound/firewire/amdtp-stream.c'.
 - The work requires much changes, thus it's impossible for Linux 4.6.
   ALSA firewire stack in Linux 4.6 will be shipped with these issues.
 - We have a short time till merge window of Linux 4.7 (Just one week).
   I'll work for merging my proposed patchset[2][3][4], without fixing
   the issues.

[1]
http://mailman.alsa-project.org/pipermail/alsa-devel/2016-March/105608.html
[2]
http://mailman.alsa-project.org/pipermail/alsa-devel/2016-April/106950.html
[3]
http://mailman.alsa-project.org/pipermail/alsa-devel/2016-April/107290.html
[4]
http://mailman.alsa-project.org/pipermail/alsa-devel/2016-April/107531.html


Regards

Takashi Sakamoto


More information about the Alsa-devel mailing list