• Lukas Wunner's avatar
    PCI: Enable NVIDIA HDA controllers · b516ea58
    Lukas Wunner authored
    Many NVIDIA GPUs can be configured as either a single-function video device
    or a multi-function device with video at function 0 and an HDA audio
    controller at function 1.  The HDA controller can be enabled or disabled by
    a bit in the function 0 config space.
    
    Some BIOSes leave the HDA disabled, which means the HDMI connector from the
    NVIDIA GPU may not work.  Sometimes the BIOS enables the HDA if an HDMI
    cable is connected at boot time, but that doesn't handle hotplug cases.
    
    Enable the HDA controller on device enumeration and resume and re-read the
    header type, which tells us whether the GPU is a multi-function device.
    
    This quirk is limited to NVIDIA PCI devices with the VGA Controller device
    class.  This is expected to correspond to product configurations where the
    NVIDIA GPU has connectors attached.  Other products where the device class
    is 3D Controller are expected to correspond to configurations where the
    NVIDIA GPU is dedicated (dGPU) and has no connectors.  See original post
    (URL below) for more details.
    
    This commit takes inspiration from an earlier patch by Daniel Drake.
    
    Link: https://lore.kernel.org/r/20190708051744.24039-1-drake@endlessm.com v2
    Link: https://lore.kernel.org/r/20190613063514.15317-1-drake@endlessm.com v1
    Link: https://devtalk.nvidia.com/default/topic/1024022
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75985Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Signed-off-by: default avatarDaniel Drake <drake@endlessm.com>
    [bhelgaas: commit log, log message, return early if already enabled]
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Cc: Aaron Plattner <aplattner@nvidia.com>
    Cc: Peter Wu <peter@lekensteyn.nl>
    Cc: Ilia Mirkin <imirkin@alum.mit.edu>
    Cc: Karol Herbst <kherbst@redhat.com>
    Cc: Maik Freudenberg <hhfeuer@gmx.de>
    b516ea58
quirks.c 185 KB