mbox series

[v2,0/2] fix tegra-hda on tegra30 devices

Message ID 20210108135913.2421585-1-pgwipeout@gmail.com
Headers show
Series fix tegra-hda on tegra30 devices | expand

Message

Peter Geis Jan. 8, 2021, 1:59 p.m. UTC
The following patches fix tegra-hda on legacy tegra devices.
Two issues were discovered preventing tegra-hda from functioning:
-The hda clocks on tegra30 were assigned to clk_m and running at too low
of a rate to function.
-The tegra-hda encounters an input/output error when opening a stream.

Since the only mainline device that used tegra-hda until recently was the
t124, it is unknown exactly when this was broken. Fortunately a recent
patch was submitted that fixed the issue only on t194 devices. We can
apply it to the tegra30-hda device to resolve the issue across the board.
Note that downstream devices used the spdif device instead of hda for hdmi
audio. The spdif device lacks a driver on mainline.

-Checkpatch seems to have issues finding [1], but git show has no issue.
[1] commit 60019d8c650d ("ALSA: hda/tegra: workaround playback failure on
Tegra194")

Changelog:

v2:
-Added ack and reviewed-by from Jon
-Updated fix to apply to tegra30-hda vice universally (Thanks Jon)
-Updated commit to include comments from hardware team (Thanks Sameer)
-Cleaned up commit messages

Peter Geis (2):
  clk: tegra30: Add hda clock default rates to clock driver
  ALSA: hda/tegra: fix tegra-hda on tegra30 soc

 drivers/clk/tegra/clk-tegra30.c | 2 ++
 sound/pci/hda/hda_tegra.c       | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

Comments

Sameer Pujar Jan. 8, 2021, 3:15 p.m. UTC | #1
On 1/8/2021 7:29 PM, Peter Geis wrote:
> External email: Use caution opening links or attachments
>
>
> 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 60019d8c650d ("ALSA: hda/tegra: workaround playback failure on
> Tegra194")
>
> Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
> Tested-by: Ion Agorria <ion@agorria.com>
> Signed-off-by: Peter Geis <pgwipeout@gmail.com>
> ---
>   sound/pci/hda/hda_tegra.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Thanks Peter.

Reviewed-by: Sameer Pujar <spujar@nvidia.com>
Takashi Iwai Jan. 12, 2021, 8:22 a.m. UTC | #2
On Fri, 08 Jan 2021 14:59:11 +0100,
Peter Geis wrote:
> 
> The following patches fix tegra-hda on legacy tegra devices.
> Two issues were discovered preventing tegra-hda from functioning:
> -The hda clocks on tegra30 were assigned to clk_m and running at too low
> of a rate to function.
> -The tegra-hda encounters an input/output error when opening a stream.
> 
> Since the only mainline device that used tegra-hda until recently was the
> t124, it is unknown exactly when this was broken. Fortunately a recent
> patch was submitted that fixed the issue only on t194 devices. We can
> apply it to the tegra30-hda device to resolve the issue across the board.
> Note that downstream devices used the spdif device instead of hda for hdmi
> audio. The spdif device lacks a driver on mainline.
> 
> -Checkpatch seems to have issues finding [1], but git show has no issue.
> [1] commit 60019d8c650d ("ALSA: hda/tegra: workaround playback failure on
> Tegra194")
> 
> Changelog:
> 
> v2:
> -Added ack and reviewed-by from Jon
> -Updated fix to apply to tegra30-hda vice universally (Thanks Jon)
> -Updated commit to include comments from hardware team (Thanks Sameer)
> -Cleaned up commit messages
> 
> Peter Geis (2):
>   clk: tegra30: Add hda clock default rates to clock driver
>   ALSA: hda/tegra: fix tegra-hda on tegra30 soc

Shall I apply both patches via sound git tree?

Or, if you want to take through clk tree, let me know.  In that case,
feel free to take my ack:
Acked-by: Takashi Iwai <tiwai@suse.de>


thanks,

Takashi
Thierry Reding Jan. 12, 2021, 1 p.m. UTC | #3
On Tue, Jan 12, 2021 at 09:22:38AM +0100, Takashi Iwai wrote:
> On Fri, 08 Jan 2021 14:59:11 +0100,
> Peter Geis wrote:
> > 
> > The following patches fix tegra-hda on legacy tegra devices.
> > Two issues were discovered preventing tegra-hda from functioning:
> > -The hda clocks on tegra30 were assigned to clk_m and running at too low
> > of a rate to function.
> > -The tegra-hda encounters an input/output error when opening a stream.
> > 
> > Since the only mainline device that used tegra-hda until recently was the
> > t124, it is unknown exactly when this was broken. Fortunately a recent
> > patch was submitted that fixed the issue only on t194 devices. We can
> > apply it to the tegra30-hda device to resolve the issue across the board.
> > Note that downstream devices used the spdif device instead of hda for hdmi
> > audio. The spdif device lacks a driver on mainline.
> > 
> > -Checkpatch seems to have issues finding [1], but git show has no issue.
> > [1] commit 60019d8c650d ("ALSA: hda/tegra: workaround playback failure on
> > Tegra194")
> > 
> > Changelog:
> > 
> > v2:
> > -Added ack and reviewed-by from Jon
> > -Updated fix to apply to tegra30-hda vice universally (Thanks Jon)
> > -Updated commit to include comments from hardware team (Thanks Sameer)
> > -Cleaned up commit messages
> > 
> > Peter Geis (2):
> >   clk: tegra30: Add hda clock default rates to clock driver
> >   ALSA: hda/tegra: fix tegra-hda on tegra30 soc
> 
> Shall I apply both patches via sound git tree?
> 
> Or, if you want to take through clk tree, let me know.  In that case,
> feel free to take my ack:
> Acked-by: Takashi Iwai <tiwai@suse.de>

There doesn't seem to be a build-time (or even runtime) dependency
between the two patches and they fix two independent issues, so they
could also go in separately.

I'm fine either way. From a Tegra perspective, the Tegra30 clock driver
is very low activity, so I don't expect any conflicts with between this
and some other patches that might go in through the clock tree.

Thierry
Takashi Iwai Jan. 12, 2021, 1:46 p.m. UTC | #4
On Tue, 12 Jan 2021 14:00:37 +0100,
Thierry Reding wrote:
> 
> On Tue, Jan 12, 2021 at 09:22:38AM +0100, Takashi Iwai wrote:
> > On Fri, 08 Jan 2021 14:59:11 +0100,
> > Peter Geis wrote:
> > > 
> > > The following patches fix tegra-hda on legacy tegra devices.
> > > Two issues were discovered preventing tegra-hda from functioning:
> > > -The hda clocks on tegra30 were assigned to clk_m and running at too low
> > > of a rate to function.
> > > -The tegra-hda encounters an input/output error when opening a stream.
> > > 
> > > Since the only mainline device that used tegra-hda until recently was the
> > > t124, it is unknown exactly when this was broken. Fortunately a recent
> > > patch was submitted that fixed the issue only on t194 devices. We can
> > > apply it to the tegra30-hda device to resolve the issue across the board.
> > > Note that downstream devices used the spdif device instead of hda for hdmi
> > > audio. The spdif device lacks a driver on mainline.
> > > 
> > > -Checkpatch seems to have issues finding [1], but git show has no issue.
> > > [1] commit 60019d8c650d ("ALSA: hda/tegra: workaround playback failure on
> > > Tegra194")
> > > 
> > > Changelog:
> > > 
> > > v2:
> > > -Added ack and reviewed-by from Jon
> > > -Updated fix to apply to tegra30-hda vice universally (Thanks Jon)
> > > -Updated commit to include comments from hardware team (Thanks Sameer)
> > > -Cleaned up commit messages
> > > 
> > > Peter Geis (2):
> > >   clk: tegra30: Add hda clock default rates to clock driver
> > >   ALSA: hda/tegra: fix tegra-hda on tegra30 soc
> > 
> > Shall I apply both patches via sound git tree?
> > 
> > Or, if you want to take through clk tree, let me know.  In that case,
> > feel free to take my ack:
> > Acked-by: Takashi Iwai <tiwai@suse.de>
> 
> There doesn't seem to be a build-time (or even runtime) dependency
> between the two patches and they fix two independent issues, so they
> could also go in separately.

Yes.  OTOH, it's better to be applied in a shot when you look back at
the changes later.

> I'm fine either way. From a Tegra perspective, the Tegra30 clock driver
> is very low activity, so I don't expect any conflicts with between this
> and some other patches that might go in through the clock tree.

OK, then I queued both patches now to for-linus branch in sound tree.


Thanks!

Takashi