-
Notifications
You must be signed in to change notification settings - Fork 140
Description
On 6.14-rc3 I am seeing that using the SDW amp feeback causes lots of bus clashes. I get the same on current HEAD of sof/linux.
I have determined that the problem is this patch:
"soundwire: generic_bandwidth_allocation: count the bandwidth of active streams only"
If I revert that patch the amp feedback works.
I have attached kernel logs that include extra debug around the peripheral port setup code. These show the bad case using 6.14-rc3 and the working case with that patch reverted.
614-rc3-port-prep-bad.txt
614-rc3-patch-reverted-good.txt
This is the patch for the extra logging:
0001-Debugging-for-SDW-port-enable.patch.txt
The test case is to do loopback testing (simultaneous play to amps and capture from amps) with various different settings for which channel each amplifier is looping back (including not looping back anything), Here is the file listing the settings for each loopback test case, to give an idea of what the test cases are:
loopback2_cs35l56_sofsoundwire.yaml.txt
(The actual test is part of a larger test harness so not something that can easily be attached to a ticket and installed on another system)
It's difficult to match up what is happening in the good and bad cases, because the order of some of the actions seems to get shuffled around. But it looks like with that suspect patch:
- It is missing some writes to clear the enabled channels on an amp by writing 0 to the channel enable register
- There are extra writes to enable channels on an amp, which are not enabled in the good (reverted) case
Test hardware:
- UpXtreme MTL
- Cirrus Logic CDB35L56-EIGHT-C
- All 8 amps in use.
- DP1 is playback, DP3 is feedback.
- There are four feedback channels per bus, but only one DP3 channel is enabled on each amp, a different channel on each amp.