Bug 214199

Summary: Sapphire NITRO+ RX 580 4G G5 - Secondary display doesn't wake up on boot, both displays won't wake up from suspend
Product: Drivers Reporter: Zeljko (kernel)
Component: Video(DRI - non Intel)Assignee: drivers_video-dri
Status: NEW ---    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 5.13.12 Subsystem:
Regression: No Bisected commit-id:
Attachments: Boot dmesg
Suspend dmesg

Description Zeljko 2021-08-27 11:08:02 UTC
Created attachment 298497 [details]
Boot dmesg

Hi! This is the first time I've tried Linux with this graphics card.

The issues are that my second monitor doesn't wake up from stand by on boot and also both monitors won't wake up from suspend.

If I turn off the second monitor and turn it back on after boot it works fine.

Same with both monitors after the computer wakes up from suspend. I have to turn off both of them and turn them back on.

I'm attaching both boot and suspend dmesg logs with drm.debug=0xe kernel parameter from a fresh install of Arch Linux.
Comment 1 Zeljko 2021-08-27 11:08:33 UTC
Created attachment 298499 [details]
Suspend dmesg
Comment 2 Zeljko 2021-08-30 20:58:48 UTC
At first, I've got both monitors to work correctly with amdgpu.dc=0 kernel parameter.


After analyzing the dmesg outputs without the above kernel parameter I've noticed that, on boot, my second monitor (connected on HDMI-A-2) was detected but went on some kind of loop reporting that the Edid was changed.

[drm:dc_link_detect_helper [amdgpu]] link=3, dc_sink_in=0000000000000000 is now Disconnected prev_sink=000000009ae23fd3 dpcd same=1 edid same=0
[drm:amdgpu_dm_update_connector_after_detect [amdgpu]] DCHPD: connector_id=3: Old sink=000000009ae23fd3 New sink=0000000000000000
[drm:drm_connector_update_edid_property [drm]] [CONNECTOR:79:HDMI-A-2] Edid was changed.
[drm:drm_connector_update_edid_property [drm]] Updating change counter to 61


Same thing happens when the computer wakes up from suspend, but than both monitors go into the same kind of loop.

[drm:dc_link_detect_helper [amdgpu]] link=3, dc_sink_in=0000000000000000 is now Disconnected prev_sink=000000003f9f81c9 dpcd same=1 edid same=0
[drm:amdgpu_dm_update_connector_after_detect [amdgpu]] DCHPD: connector_id=3: Old sink=000000003f9f81c9 New sink=0000000000000000
[drm:drm_connector_update_edid_property [drm]] [CONNECTOR:79:HDMI-A-2] Edid was changed.
[drm:drm_connector_update_edid_property [drm]] Updating change counter to 118

[drm:dc_link_detect_helper [amdgpu]] link=2, dc_sink_in=0000000000000000 is now Disconnected prev_sink=000000006f240528 dpcd same=1 edid same=0
[drm:amdgpu_dm_update_connector_after_detect [amdgpu]] DCHPD: connector_id=2: Old sink=000000006f240528 New sink=0000000000000000
[drm:drm_connector_update_edid_property [drm]] [CONNECTOR:74:HDMI-A-1] Edid was changed.
[drm:drm_connector_update_edid_property [drm]] Updating change counter to 41


After some googling I've managed to get both monitors working correctly without amdgpu.dc=0 by forcing edid files extracted from both monitors using these kernel parameters:

video=HDMI-A-1:e video=HDMI-A-2:e drm.edid_firmware=HDMI-A-1:edid/edid1.bin,HDMI-A-2:edid/edid2.bin


Couple more details that may help:
- both monitors are the same model BenQ GW2470
- they are both connected via a HDMI 2.0 cable from the same maker and are the same length
- I've decoded and compared both edid files and the only differences are the "Display Product Serial Number" and "Checksum"