You are not logged in.

#1 2017-10-09 15:15:44

aphirst
Member
From: Hull, England
Registered: 2008-06-30
Posts: 99
Website

[Lenovo T430] [Optimus] No HDMI/DP Audio device (even in lspci -H1)

linux: 4.13.4-1-ARCH
mesa: 17.2.2-1
xf86-video-intel: 1:2.99.917+781+gc8990575-1
xf86-video-nouveau: 1.0.15-2

Lenovo ThinkPad T430 with Optimus Graphics, (Intel 4000, NVIDIA GF108M, NVS 5400M, in the NVC0 Family)

Context:
The machine is set-up using both FOSS drivers, with the intention to use on a Docking Station in Dual-Head mode and HDMI/DP Audio (on the external monitor). I had originally tried using the proprietary driver, but the Multi-Head support was unsatisfying, requiring the BIOS setting "Graphics Device" to be "Discrete" (i.e. disable the Intel card entirely) to work how I wanted. In any event, I want this setting to be "NVIDIA Optimus" so that I can make use of the power-saving and offloading features. So I removed the proprietary driver (and bumblebee, and other related packages + config files), installing nouveau.

So with Intel+nouveau the video seems to be working fine, however only the Intel audio devices seem to show (i.e. the headphone port and the speakers), this applies in all of:

  • pavucontrol

  • aplay -l

  • aplay -L

  • lspci

and perhaps most surprisingly also even

  • lspci -H1

I say this, since there is a selection of similar discussion threads online (here and elsewhere) which indicate that for them the device DOES appear in this list, if not in the others.

If I set that BIOS setting ("Graphics Device") back to "Discrete", I do get 2 independent Audio devices, both of which seem to work. But, as mentioned, I would very much prefer to be able to use the "Optimus" functionality at least to some degree.

Here follows a selection of references I've found, along with some comments:

https://bugs.freedesktop.org/show_bug.cgi?id=75985 - works for him with `lcpci -H1`, not for me
https://bbs.archlinux.org/viewtopic.php?id=230125 and https://devtalk.nvidia.com/default/topi … 3/#5211273 - suggests manually performing PCI magic - doesn't work for me since unable to `rmmod nouveau` even after stopping lightdm or blacklisting the `nouveau` module.
(If I try anyway to run the `setpci` command and restart X, I just get

pcilib: cannot open /sys/bus/devices/0000:01:00.0/config
lspci: Unable to read the standard configuration space header of device 0000:01:00.0

in lspci instead of what would presumably be the desired Audio device.

https://bugs.archlinux.org/task/54986 - bug on the Arch tracker, just suggests going further upstream; also for this user, he still sees the right number of Audio devices even if they don't work
https://bbs.archlinux.org/viewtopic.php?id=228501 - another user for whom the device does show up in `lspci -H1`, unlike my case

And, I brought this up in #nouveau on Freenode IRC, and someone there decided to make the following mailing list post.
https://marc.info/?l=linux-pci&m=150756010119164&w=2

---

As and when I can work out more, I'll post it into this thread. Meanwhile, if anyone has any suggestions on how to further diagnose this (especially pertaining to un/reloading the nouveau module and applying the "PCI magic") I'd of course much appreciate it.

--

CLARIFICATION: If I just run the "PCI Magic" (reproduced below), the NVIDIA HDMI/DP Audio device DOES appear in `lspci -H1`, but since I'm unable to successfully trigger the PCI remove/rescan (or removing the nouveau module), I can't use the devices properly.

As root:

setpci -s 01:00.0 0x488.l=0x2000000:0x2000000
rmmod nouveau
echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
echo 1 > /sys/bus/pci/devices/0000:00:01.0/rescan
modprobe nouveau

FURTHER UPDATE: If using a systemd service which runs sufficiently early on boot, it IS possible for the module-juggling and setpci command to run successfully, and the result is that the NVIDIA HDMI device displays AND works.

[adam@rakka ~]$ cat /etc/systemd/system/hdmi-audio.service 
[Unit]
Description=PCI Bit-Banging to fix NVIDIA HDMI Audio
DefaultDependencies=no

[Service]
Type=simple
ExecStart=/usr/sbin/sh /usr/sbin/hdmi_audio.sh

[Install]
WantedBy=sysinit.target
[adam@rakka ~]$ cat /usr/sbin/hdmi_audio.sh 
setpci -s 01:00.0 0x488.l=0x2000000:0x2000000
rmmod nouveau
echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
echo 1 > /sys/bus/pci/devices/0000:00:01.0/rescan
modprobe nouveau

I suppose that now it simply remains to be seen how this is handled upstream. As mentioned, this has been posted on the dri-devel and linux-pci mailing lists.

FURTHER UPDATE: It seems that there is now an (in development) kernel module which enables the HDMI audio. Apparently there's some extra magic at play, involving power states. https://bugs.freedesktop.org/show_bug.cgi?id=75985#c27

Last edited by aphirst (2018-01-17 20:25:20)


ArchLinux | x86_64 | linux-ck-ivybridge
ThinkPad X230 | 12.5" | i5-3320M (2.5GHz) | HD 4000 | 16GB (1600MHz) | 256GB mSATA SSD | 2TB HDD
ThinkPad T430 | 14.1" | i7-3520M (2.9GHz) | GF108M (NVS 5400M) | 16GB (1600MHz) | 256GB mSATA SSD | 1TB HDD | 500GB HDD

Offline

Board footer

Powered by FluxBB