Hi,
On Fri, 13 Dec 2024, Lucas De Marchi wrote:
Thanks Kai to pointing me to this thread, trying to revive it. Also adding dri-devel as it may be relevant there and Maarten who worked on the xe integration recently
ack, given fresh wave of bugs this year (even if these are all (?) bugs triggered in test configurations), probably warrants another look.
[1) prevent/block the unbind if audio device is busy]
and there's no way to block unbind from the pci level neither, so this is not really possible. There's nothing blocking someone to unplug the card if it's on a hotplug-capable bus and/or someone calling
# echo 0000:00:02.0 > /sys/module/xe/drivers/pci:xe/unbind
to tell the module to unbind from the device. If that involves multiple
Ack, I think we can put this option to rest.
[unbind the ALSA card]
yeah, since it depends on the i915/xe side to power up the display engine, I think handling that esssentially the same as a hotplug would be ideal
[...]
I'm not yet very familar with the sound side and checking if something changed from when this thread started: for cards that can't work without the other component, would it be hard to escalate that event to handle it the same as a hotplug? Because from this thread it seems usb/pci hotplug is already available.
I don't think much has changed. I think this is (still) a doable option, but just requires effort put in (which so far has not happened). I think the problem can be roughly divided in two categories:
1) discrete graphics - controller on discrete PCI device
Here the problem is more acute (as may affect register accesses done from audio driver), but potentially also easier to fix. There is a single driver (snd-hda-intel) to handle this case in ALSA and the sound card created only exposes the HDMI/DP PCMs, so if graphics side unbinds, disconnecting the ALSA card seems ok as well. The open I have is how do we recreate the ALSA card. Audio driver probe is triggered by attach of the PCI device, but here the PCI device is not unplugged, just unbound by one of the drivers. But doesn't sound like a unique problem to audio, so I'm sure there's some example solution to follow.
2) integrated display codecs
The regular laptop case is a bit more iffy as there are more audio drivers using the display codec driver stack (each need support), and in most cases, the ALSA card is a mix of HDMI/DP but also internal codec and speaker PCMs. If we use the card disconnect infra in ALSA (i.e. same infra as USB hotplug), this means display unbind will not just disconnect the HDMI/DP PCM device, but alsl the interal audio codec and speakers. And there's a bigger issue how we reenumerate the full card again.
I think the longterm solution is to move the HDMI/DP PCMs to their own ALSA card. We in fact some work going on to this direction in the SOF driver, but it's far from complete, and we are not sure whether we can change the existing platforms to use this approach (as changing the card topologies will be visible to user-space as well and potentially break stuff).
I did file a bug to track this in SOF https://github.com/thesofproject/linux/issues/5276 .
Br, Kai