Display Port: Vega56/64 fails to negotiate link
Brief summary of the problem:
I have a Oculus Rift S that fails to negotiate DP Link. the CR (Clock recovery) step fails. So, I get no display output.
Hardware description:
- CPU: AMD
- GPU: 44:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Vega 10 XL/XT [Radeon RX Vega 56/64] [1002:687f] (rev c3)
- System Memory: 32GB
- Display(s): Oculus Rift S VR Headset
- Type of Display Connection: DP (Display Port)
System information:
- Distro name and Version: Ubuntu Jammy.
- Kernel version: Linux thread 5.17.1+ #86 SMP PREEMPT Mon Apr 11 18:13:19 BST 2022 x86_64 x86_64 x86_64 GNU/Linux
- Custom kernel: Mainline with some added printk for my debugging.
- AMD official driver version: amdgpu from 5.17.1
How to reproduce the issue:
Try to attach headset, the headset is not recognized and no display happens. I did some diagnosis of the problem, and it turns out that during DP CR negotiation, the VOLTAGE_SWING is always zero, and never 1,2 or 3. The below patch fixes this, so that the VOLTAGE_SWING correctly gets adjusted as part of the negotiation.
Note: The DP on the headset is only powered if the LED light on the headset, next to the eyes, is white. Essentially, one needs to be running the VR application that talks to the headset over USB, before the DP link can start negotiating. So, if trying to reproduce this problem, you need to get the white LED before you start testing.
Attached files:
Signed-off-by: James.Dutton@gmail.com The attached file is a patch that fixes the problem.