USB C Displayport Alt Mode Not Functioning

Detailed Issue Report: External Monitor Not Working on Manjaro Linux with Hybrid AMD/NVIDIA Graphics

1. Introduction

I have been working through this issue with the help of chatgpt’s new 01advanced model and this is a summary of what has been happening and what I have done up to this point. I am experiencing an issue where an external monitor connected via a USB-C to DisplayPort adapter is not recognized or detected by my laptop running Manjaro Linux. The laptop (Razer Blade 14 2021) has a hybrid graphics setup with an AMD Ryzen 9 5900 and an NVIDIA RTX 3060 GPU. Despite numerous troubleshooting steps, the external monitor remains non-functional. The adapter has been tested and works on windows on the same machine, and on other machines as well.


2. System Information

Hardware Configuration

  • Laptop Model: Razer Blade 14" (2021)
  • CPU: AMD Ryzen 9 5900
  • Integrated GPU: AMD Radeon Graphics
  • Discrete GPU: NVIDIA RTX 3060 Mobile/Max-Q
  • Memory: 16 GB
  • Display:
    • Internal Monitor: 1920x1080 resolution
    • External Monitor: Connected via USB-C to DisplayPort adapter (not detected)

Software Configuration

  • Operating System: Manjaro Linux (64-bit)
  • Kernel Version: Initially using 6.10.13-3-MANJARO, later switched to 6.1 LTS kernel but switched back after no progress was made.
  • Desktop Environment: GNOME
  • Display Server: Initially Wayland, attempted to switch to Xorg but this did not fix my issue
  • NVIDIA Driver Version: 550.120 (as per dmesg output)
  • Installed Video Driver Configurations:
    • video-hybrid-amd-nvidia-prime (proprietary)
    • video-linux (free)

Relevant Outputs

  • lsmod | grep nvidia: Shows only nvidia_uvm and nvidia, missing nvidia_modeset and nvidia_drm I was able to use modprobe to forceload the modules but nothing changed.
  • dmesg Outputs:
    • NVIDIA modules are tainting the kernel
    • nvidia_drm module is not loaded
    • No significant errors pointing to the cause of the issue
  • Kernel Configuration:
    • CONFIG_TYPEC_DP_ALTMODE=m (indicates DisplayPort Alternate Mode over USB-C is available as a module)

3. Detailed Troubleshooting Steps Taken

Step 1: Initial Investigation

  • Issue Identified: External monitor connected via USB-C to DisplayPort adapter is not working.
  • Observation: Monitor is not detected in display settings or xrandr output.

Step 2: Switch from Wayland to Xorg

  • Action: Modified /etc/gdm/custom.conf to disable Wayland.
    • Uncommented WaylandEnable=false
  • Result: System boots into Xorg, but external monitor issue persists.

Step 3: Verify NVIDIA Drivers Installation

  • Action: Checked installed NVIDIA packages using pacman -Qs nvidia.
  • Observation: Confirmed nvidia-utils and related packages are installed.

Step 4: Configure PRIME Offloading

  • Action: Created /etc/X11/xorg.conf.d/90-nvidia.conf with configurations for NVIDIA and AMD GPUs.
  • Issue: Original configuration incorrectly referenced Intel GPU instead of AMD.
  • Correction: Updated configuration to reference amdgpu instead of intel.

Updated Configuration:

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "amdgpu"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:1:0:0"
    Option "AllowEmptyInitialConfiguration" "true"
    Option "Coolbits" "28"
    Option "SLI" "Off"
    Option "BaseMosaic" "off"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration" "true"
    Option "PrimaryGPU" "yes"
EndSection

Section "Device"
    Identifier "amdgpu"
    Driver "amdgpu"
    BusID "PCI:4:0:0"
    Option "AccelMethod" "none"
EndSection

Section "Screen"
    Identifier "amdgpu"
    Device "amdgpu"
EndSection
  • Result: External monitor still not detected.

Step 5: Enable NVIDIA DRM Modeset

  • Action: Added options nvidia_drm modeset=1 to /usr/lib/modprobe.d/nvidia.conf.
  • Updated GRUB Configuration:
    • Added nvidia-drm.modeset=1 to GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub.
  • Ran:
    sudo mkinitcpio -P
    sudo update-grub
    sudo reboot
    
  • Result: nvidia_drm module still not loaded.

Step 6: Verify NVIDIA Modules

  • Action: Ran lsmod | grep nvidia.
  • Result: Only nvidia_uvm and nvidia modules are loaded; nvidia_modeset and nvidia_drm are missing.

Step 7: Check for Errors in Kernel Messages

  • Action: Ran dmesg | grep -i nvidia.
  • Observation: No significant errors indicating why nvidia_drm is not loaded.

Step 8: Switch to an LTS Kernel

  • Action: Installed the 6.1 LTS kernel using mhwd-kernel -i linux61.
  • Installed corresponding headers:
    sudo pacman -S linux61-headers
    
  • Updated GRUB to display the menu at boot:
    • Edited /etc/default/grub to set GRUB_TIMEOUT_STYLE=menu and GRUB_TIMEOUT=5.
    • Ran sudo update-grub.
  • Rebooted and selected the 6.1 kernel from GRUB menu.
  • Result: Issue persists; nvidia_drm module still not loaded.

Step 9: Reinstall NVIDIA Drivers

  • Action: Removed existing drivers:
    sudo mhwd -r pci video-hybrid-amd-nvidia-prime
    
  • Reinstalled drivers:
    sudo mhwd -i pci video-hybrid-amd-nvidia-prime
    
  • Cleaned up residual configuration files:
    sudo rm /etc/X11/xorg.conf.d/90-mhwd.conf
    sudo rm /etc/X11/xorg.conf.d/90-nvidia.conf
    sudo rm /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
    
  • Result: nvidia_drm module still not loaded.

Step 10: Ensure Secure Boot is Disabled

  • Action: Checked Secure Boot status:
    sudo mokutil --sb-state
    
  • Observation: Secure Boot is disabled.
  • Result: Issue persists.

Step 11: Load typec_displayport Module

  • Action: Verified CONFIG_TYPEC_DP_ALTMODE=m in kernel configuration.
  • Attempted to load module:
    sudo modprobe typec_displayport
    
  • Checked if module is loaded:
    lsmod | grep typec_displayport
    
  • Result: Module loaded successfully, but external monitor still not detected.

Step 12: Examine USB-C Port Functionality

  • Action: Ran lsusb to list USB devices.
  • Checked kernel messages:
    sudo dmesg | grep -i 'usb\|typec\|thunderbolt'
    
  • Observation: No errors indicating issues with USB-C port.

Step 13: Verify Module Dependencies

  • Action: Ensured related modules are loaded:
    lsmod | grep typec
    
  • Modules Loaded:
    • typec_displayport
    • typec
    • typec_ucsi
    • ucsi_acpi
  • Result: Modules are loaded, but external monitor remains undetected.

Step 14: Check System Logs for Errors

  • Action: Examined system logs:
    sudo journalctl -b | grep -i 'typec\|displayport\|drm\|nvidia\|amdgpu\|error\|fail'
    
  • Observation: No significant errors related to the issue.

Step 15: Test with a Live USB Environment

  • Action: Booted into a Live USB of Ubuntu.
  • Result: External monitor still not detected, suggesting a potential hardware issue.

4. Summary of Findings

  • nvidia_drm and nvidia_modeset Modules Not Loaded:
    • Essential for modesetting and external display functionality.
    • Attempts to load modules manually were unsuccessful.
  • Kernel Version Compatibility:
    • Switching to the 6.1 LTS kernel did not resolve the issue.
  • NVIDIA Driver Installation:
    • Reinstalled video-hybrid-amd-nvidia-prime drivers multiple times.
    • Ensured kernel headers are installed.
  • USB-C DisplayPort Alternate Mode Support:
    • CONFIG_TYPEC_DP_ALTMODE is set to m, and module is loaded.
    • External monitor still not detected after loading the typec_displayport module.
  • Hardware Considerations:
    • Tested in a Live USB environment; issue persists.
    • Suggests potential hardware limitation or incompatibility.
  • Secure Boot:
    • Confirmed to be disabled, ruling out interference.
  • System Logs and Errors:
    • No significant errors indicating why the external monitor is not working.
    • No conflicts with other modules like nouveau.

5. Relevant System Outputs

lsmod | grep nvidia Output

nvidia_uvm           6701056  2
nvidia              60596224  7 nvidia_uvm

dmesg | grep -i nvidia Output

[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.10-x86_64 root=UUID=... rw quiet splash apparmor=1 security=apparmor resume=UUID=... udev.log_priority=3 nvidia-drm.modeset=1
[    0.030436] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.10-x86_64 root=UUID=... rw quiet splash apparmor=1 security=apparmor resume=UUID=... udev.log_priority=3 nvidia-drm.modeset=1
[    4.088444] audit: type=1400 audit(...): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe" pid=422 comm="apparmor_parser"
[    4.665400] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input16
[   11.753929] nvidia: module license 'NVIDIA' taints kernel.
[   12.106675] nvidia-nvlink: Nvlink Core is being initialized, major device number 510
[   12.107702] nvidia 0000:01:00.0: enabling device (0000 -> 0003)
[   12.152446] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  550.120  Fri Sep 13 10:10:01 UTC 2024
[   12.516043] nvidia_uvm: module uses symbols nvUvmInterfaceDisableAccessCntr from proprietary module nvidia, inheriting taint.
[   12.598262] nvidia-uvm: Loaded the UVM driver, major device number 508.

mhwd -li Output

> Installed PCI configs:
--------------------------------------------------------------------------------
                  NAME               VERSION          FREEDRIVER           TYPE
--------------------------------------------------------------------------------
           video-linux            2024.05.06                true            PCI
video-hybrid-amd-nvidia-prime            2023.03.23               false            PCI

Warning: No installed USB configs!

Kernel Configuration for DisplayPort Alternate Mode

zcat /proc/config.gz | grep TYPEC_DP_ALTMODE
CONFIG_TYPEC_DP_ALTMODE=m

Any help in getting this working is extremely appriciated.

1 Like

have you checked this
https://wiki.archlinux.org/title/DisplayLink

This unfortunately did not result in any resolution. Additionally I will add I have discovered even my HDMI port will not output anything to any connected display