linux/sound/pci
Peter Geis 615d435400 ALSA: hda/tegra: fix tegra-hda on tegra30 soc
Currently hda on tegra30 fails to open a stream with an input/output error.

For example:
speaker-test -Dhw:0,3 -c 2

speaker-test 1.2.2

Playback device is hw:0,3
Stream parameters are 48000Hz, S16_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 64 to 16384
Period size range from 32 to 8192
Using max buffer size 16384
Periods = 4
was set period_size = 4096
was set buffer_size = 16384
 0 - Front Left
Write error: -5,Input/output error
xrun_recovery failed: -5,Input/output error
Transfer failed: Input/output error

The tegra-hda device was introduced in tegra30 but only utilized in
tegra124 until recent chips. Tegra210/186 work only due to a hardware
change. For this reason it is unknown when this issue first manifested.
Discussions with the hardware team show this applies to all current tegra
chips. It has been resolved in the tegra234, which does not have hda
support at this time.

The explanation from the hardware team is this:
Below is the striping formula referenced from HD audio spec.
   { ((num_channels * bits_per_sample) / number of SDOs) >= 8 }

The current issue is seen because Tegra HW has a problem with boundary
condition (= 8) for striping. The reason why it is not seen on
Tegra210/Tegra186 is because it uses max 2SDO lines. Max SDO lines is
read from GCAP register.

For the given stream (channels = 2, bps = 16);
ratio = (channels * bps) / NSDO = 32 / NSDO;

On Tegra30,      ratio = 32/4 = 8  (FAIL)
On Tegra210/186, ratio = 32/2 = 16 (PASS)
On Tegra194,     ratio = 32/4 = 8  (FAIL) ==> Earlier workaround was
applied for it

If Tegra210/186 is forced to use 4SDO, it fails there as well. So the
behavior is consistent across all these chips.

Applying the fix in [1] universally resolves this issue on tegra30-hda.
Tested on the Ouya game console and the tf201 tablet.

[1] commit 60019d8c65 ("ALSA: hda/tegra: workaround playback failure on
Tegra194")

Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Ion Agorria <ion@agorria.com>
Reviewed-by: Sameer Pujar <spujar@nvidia.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
Link: https://lore.kernel.org/r/20210108135913.2421585-3-pgwipeout@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-01-12 14:44:47 +01:00
..
ac97 ALSA: Replace the word "slave" in vmaster API 2020-07-20 10:10:47 +02:00
ali5451 ALSA: ali5451: remove redundant variable capture_flag 2020-02-10 08:29:54 +01:00
asihpi Merge branch 'for-next' into for-linus 2020-10-12 08:51:00 +02:00
au88x0 ALSA: Replace with fallthrough pseudo keyword in the remaining places 2020-07-09 19:10:43 +02:00
aw2 ALSA: pci/aw2-saa7146: remove 'set but not used' warning 2020-07-07 12:05:14 +02:00
ca0106 ALSA: ca0106: fix error code handling 2020-08-25 09:27:49 +02:00
cs46xx ALSA: pci: delete repeated words in comments 2020-08-06 09:30:02 +02:00
cs5535audio ALSA: pci: Constify snd_kcontrol_new items 2020-01-03 09:24:28 +01:00
ctxfi ALSA: ctxfi: Replace the word blacklist 2020-07-15 14:31:54 +02:00
echoaudio ALSA: echoaudio: Fix potential Oops in snd_echo_resume() 2020-08-13 11:21:05 +02:00
emu10k1 ALSA: emu10k1: Use dma_set_mask_and_coherent to simplify code 2020-11-21 10:32:43 +01:00
hda ALSA: hda/tegra: fix tegra-hda on tegra30 soc 2021-01-12 14:44:47 +01:00
ice1712 ALSA: pci: delete repeated words in comments 2020-08-06 09:30:02 +02:00
korg1212 ALSA: pci/korg1212: remove 'set but not used' warnings 2020-07-07 12:10:21 +02:00
lola ALSA: pci: Constify snd_device_ops definitions 2020-01-03 09:23:56 +01:00
lx6464es ALSA: lx6464es: More constifications 2020-01-05 16:15:07 +01:00
mixart ALSA: mixart: Fix mutex deadlock 2020-11-19 18:26:30 +01:00
nm256 ALSA: nm256: Replace the words blacklist 2020-07-15 14:31:56 +02:00
oxygen ALSA: pci: delete repeated words in comments 2020-08-06 09:30:02 +02:00
pcxhr ALSA: pcxhr: More constifications 2020-01-05 16:14:47 +01:00
riptide ALSA: riptide: Replace tasklet with threaded irq 2020-09-09 18:34:10 +02:00
rme9652 ALSA: hdspm: Fix fall-through warnings for Clang 2020-11-21 09:29:25 +01:00
trident ALSA: pci: Constify snd_ac97_bus_ops definitions 2020-01-03 09:24:13 +01:00
vx222 ALSA: vx: More constifications 2020-01-05 16:14:30 +01:00
ymfpci ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
ad1889.c ALSA: pci: Constify snd_ac97_bus_ops definitions 2020-01-03 09:24:13 +01:00
ad1889.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ak4531_codec.c ALSA: ak4531: More constification 2020-01-05 16:15:09 +01:00
als300.c ALSA: pci: Constify snd_ac97_bus_ops definitions 2020-01-03 09:24:13 +01:00
als4000.c ALSA: pci: Drop superfluous ioctl PCM ops 2019-12-11 07:25:31 +01:00
atiixp_modem.c ALSA: atiixp: More constifications 2020-01-05 16:14:54 +01:00
atiixp.c ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
azt3328.c ALSA: Use fallthrough pseudo-keyword 2020-07-09 13:01:29 +02:00
azt3328.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
bt87x.c ALSA: bt87x: Replace the words white/blacklist 2020-07-15 14:31:54 +02:00
cmipci.c ALSA: cmipci: More constifications 2020-01-05 16:14:55 +01:00
cs4281.c ALSA: cs4281: More constification 2020-01-05 16:15:10 +01:00
cs5530.c ALSA: pci: Constify snd_device_ops definitions 2020-01-03 09:23:56 +01:00
ens1370.c ALSA: ens137x: More constification 2020-01-05 16:15:11 +01:00
ens1371.c
es1938.c ALSA: pci/es1938: remove 'set but not used' warning 2020-07-07 12:11:59 +02:00
es1968.c ALSA: es1968: Replace the words white/blacklist 2020-07-15 14:31:55 +02:00
fm801.c ALSA: pci/fm801: fix kernel-doc 2020-07-07 12:12:21 +02:00
intel8x0.c ALSA: intel8x0: Replace the words white/blacklist 2020-07-15 14:31:56 +02:00
intel8x0m.c ALSA: intel8x0: More constifications 2020-01-05 16:14:31 +01:00
Kconfig sound: Fix Kconfig indentation 2019-10-07 03:53:03 +02:00
maestro3.c ALSA: pci: Constify snd_pci_quirk tables 2020-01-03 09:24:45 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rme32.c ALSA: remove unneeded break 2020-10-26 15:27:13 +01:00
rme96.c sound updates for 5.6-rc1 2020-01-28 16:26:57 -08:00
sis7019.c sound updates for 5.6-rc1 2020-01-28 16:26:57 -08:00
sis7019.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 274 2019-06-05 17:30:30 +02:00
sonicvibes.c ALSA: pci: Constify snd_kcontrol_new items 2020-01-03 09:24:28 +01:00
via82xx_modem.c ALSA: pci/via82xx: remove 'set but not used' warnings 2020-07-07 12:12:38 +02:00
via82xx.c ALSA: via82xx: Replace the words whitelist 2020-07-15 14:31:57 +02:00