With amdgpu.dc=1, when I turn off the monitor or the monitor enters power-save state, the screen resolution changes to 1368x768, which messes up the desktop elements arrangement. Opening the settings, it is the highest offered resolution, and the original resolution can only be restored by killing X or rebooting. This effectively means that I have to keep my monitor running till logout. It happens on three different systems, all using amdgpu (RX480, RX580, RX460). Does not happen with amdgpu.dc=0.
What monitor do you use and is it connected via DisplayPort, HDMI, or DVI?
I got 3 systems where this issue occurs: 1. Monitor HP LP2475w connected via HDMI through a Pioneer AV receiver (VSX-330) to an AMD Radeon RX480. (New DC was needed to get HDMI Audio.) 2. Similar monitor, directly connected via HDMI to AMD RX 580 3. UHD monitor, connected via DisplayPort to a RX 460. I'm sitting at 1., can add more information to 2. and 3. when I return to my second apartment resp. my office tomorrow.
Can you attach a full dmesg log from boot until this issue occurs, with kernel options amdgpu.dc_log=1 and drm.debug=6? Can you also paste what 'xrandr' outputs before and after this happens? I wonder if EDID read fails for whatever reason.
No problem, here's xrandr at first: --------------------------------- before: Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 16384 x 16384 DisplayPort-0 disconnected (normal left inverted right x axis y axis) DisplayPort-1 disconnected (normal left inverted right x axis y axis) HDMI-A-0 disconnected (normal left inverted right x axis y axis) HDMI-A-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 546mm x 352mm 1920x1200 59.95*+ 1920x1080 60.00 50.00 59.94 1600x1200 60.00 1680x1050 59.88 1600x1000 60.01 1280x1024 75.02 1440x900 59.95 1280x960 60.00 1280x800 59.95 1152x864 75.00 1280x720 60.00 50.00 59.94 1024x768 75.03 60.00 832x624 74.55 800x600 75.00 60.32 720x576 50.00 720x480 60.00 59.94 640x480 75.00 60.00 59.94 720x400 70.08 DVI-D-0 disconnected (normal left inverted right x axis y axis) --------------------------------- turn off, turn on: (should wait for at least 2 secs before turning on) Screen 0: minimum 320 x 200, current 1368 x 768, maximum 16384 x 16384 DisplayPort-0 disconnected (normal left inverted right x axis y axis) DisplayPort-1 disconnected (normal left inverted right x axis y axis) HDMI-A-0 disconnected (normal left inverted right x axis y axis) HDMI-A-1 connected primary 1368x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm 1368x768 59.88* 1280x800 59.81 1280x720 59.86 1024x768 60.00 1024x576 59.90 960x540 59.63 800x600 60.32 800x450 59.82 700x450 59.88 640x480 59.94 684x384 59.88 59.85 640x400 59.88 59.98 640x360 59.86 59.83 512x384 60.00 512x288 60.00 59.92 480x270 59.63 59.82 400x300 60.32 320x240 60.05 DVI-D-0 disconnected (normal left inverted right x axis y axis)
Created attachment 137305 [details] dmesg output after turning the monitor back on The turn-off event occured at time [75.336273].
Created attachment 137386 [details] dmesg output after turning the monitor back on (2nd system) This is another dmesg output, created on my office PC with a UHD display, connected by DisplayPort. The turn-off event occurs after time [2643.173460]. Turn-on occurs some seconds later. System was updated the same day in the morning (openSUSE Tumbleweed rolling release, 4.15.2-1).
Is there at least some way to restore the real monitor resolution without killing the Xserver (and hence all running desktop applications)? Right now I either have to reboot, or I must turn off the monitor, then kill the Xserver (ctrl-alt-bs), then turn on the monitor again. It does not even suffice to kill the Xserver alone.
Unplugging and replugging the display should get you back to normal.
Unfortunately, that does not work, I just tried it. I suppose that otherwise, turning the monitor off and on should have already helped. The only way to restore leads me via killing the Xserver. Maybe some xrandr command? It needs to refresh its resolution list, though. There may be some influence by the A/V receiver in the chain, but as I posted on Feb 15, the effect is also there with my UHD monitor in the office, connected by DisplayPort, and having nothing in between.
It seems to be related to EDID, as I see it. Once I turn off the display, I lose the EDID information. Before: # find /sys -name edid -exec echo {} \; -exec od -tx1 -Ax {} \; /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-DVI-D-1/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-DP-2/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-HDMI-A-2/edid 000000 00 ff ff ff ff ff ff 00 41 2f 27 10 01 01 01 01 000010 00 19 01 03 80 36 23 78 ee ce 50 a3 54 4c 99 26 000020 0f 50 54 a5 6b 80 81 40 a9 00 a9 40 b3 00 d1 00 000030 01 01 01 01 01 01 28 3c 80 a0 70 b0 23 40 30 20 000040 36 00 22 60 21 00 00 1a 00 00 00 fc 00 56 53 58 000050 2d 33 33 30 0a 20 20 20 20 20 00 00 00 fd 00 30 000060 55 1e 46 11 00 0a 20 20 20 20 20 20 00 00 00 ff 000070 00 50 4c 43 39 33 33 30 31 34 47 0a 20 20 01 a6 000080 02 03 34 71 4b 01 02 04 85 06 10 11 13 14 15 1f 000090 38 09 7f 07 0f 7f 07 15 07 50 3e 06 c0 49 7f 00 0000a0 57 06 00 5f 7e 01 67 7e 00 83 4f 00 00 66 03 0c 0000b0 00 11 00 80 01 1d 80 18 71 1c 16 20 58 2c 25 00 0000c0 06 44 21 00 00 9e 01 1d 80 d0 72 1c 16 20 10 2c 0000d0 25 80 06 44 21 00 00 9e 01 1d 00 72 51 d0 1e 20 0000e0 6e 28 55 00 06 44 21 00 00 1e 01 1d 00 bc 52 d0 0000f0 1e 20 b8 28 55 40 06 44 21 00 00 1e 00 00 00 8f 000100 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-DP-1/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-HDMI-A-1/edid 000000 Turn off, turn on again: # find /sys -name edid -exec echo {} \; -exec od -tx1 -Ax {} \; /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-DVI-D-1/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-DP-2/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-HDMI-A-2/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-DP-1/edid 000000 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-HDMI-A-1/edid 000000 When I continue to turn it off and on again, EDID does not reappear. However, when I reboot, it is there again. How does my monitor know that my PC has been rebooted?
I solved the same problem for me a long time ago by adding a "drm_kms_helper.edid_firmware=edid/my_monitor_model_edid.bin" option to my kernel command line, after saving the EDID blob of my monitor to the given file. But sure, would be great if such wasn't necessary.
I've got the same issue with an AMD Ryzen 5 2400G after a power cycle of the monitor (Dell U3011 with a resolution of 2560x1600 connected via DisplayPort). It happened not always, but very often. I thought, it was fixed by the workaround with the "drm.edid_firmware=..." kernel parameter, but now it happened again. And there also seems to be a crash in the amdgpu driver. I've attached the dmesg output after this happened.
Created attachment 140032 [details] dmesg output after amdgpu crash
Anything new? The problem is still there, although now it falls back to a higher resolution (1920x1080), still causing a mess on my desktop. I would like to emphasize that this issue does not appear with amdgpu.dc=0. I tested it several times to make sure. I tried it with an own EDID file; picked it from the xrandr, then saved it to a file /lib/firmware/edid/mizapfmon.bin. Then I added a kernel parameter "drm.edid_firmware=edid/mizapfmon.bin". (drm_kms_helper is deprecated) During boot: Aug 12 01:07:08 capella kernel: platform HDMI-A-2: Direct firmware load for edid/mizapfmon.bin failed with error -2 Aug 12 01:07:08 capella kernel: [drm:drm_load_edid_firmware [drm]] *ERROR* Requesting EDID firmware "edid/mizapfmon.bin" failed (err=-2) I don't know whether something is missing, maybe I have to add the firmware to the initrd. But it is not required at boot time; the screen is OK at that time. When I turn the monitor off and on again, I'm getting the following lines in /var/log/messages, and the screen resolution is again reset to 1920x1080. Aug 12 01:08:27 capella kdeinit5[2024]: kscreen: canBeAppled: There are no enabled screens, at least one required Aug 12 01:08:27 capella kdeinit5[2024]: kscreen.kded: Config does not have at least one screen enabled, WILL NOT save this config, this is not what user wants. Aug 12 01:08:27 capella kernel: [drm] Got external EDID base block and 1 extension from "edid/mizapfmon.bin" for connector "HDMI-A-2" Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: RRNotify_OutputChange Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Output: 88 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: CRTC: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Mode: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Rotation: "Rotate_0" Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Connection: "Connected" Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Subpixel Order: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: RRScreenChangeNotify Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Window: 48234501 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Root: 1728 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Rotation: "Rotate_0" Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Size ID: 65535 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Size: 1920 1200 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: SizeMM: 508 317 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: RRNotify_OutputChange Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Output: 88 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: CRTC: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Mode: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Rotation: "Rotate_0" Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Connection: "Connected" Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xcb.helper: Subpixel Order: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: XRandROutput 88 update Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: m_connected: 1 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: m_crtc QObject(0x0) Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: CRTC: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: MODE: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Connection: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Primary: false Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Output 88 : connected = true , enabled = false Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: XRandROutput 88 update Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: m_connected: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: m_crtc QObject(0x0) Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: CRTC: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: MODE: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Connection: 0 Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Primary: false Aug 12 01:08:27 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Output 88 : connected = true , enabled = false Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Emitting configChanged() Aug 12 01:08:28 capella org_kde_powerdevil[2114]: kscreen: Requesting missing EDID for outputs (88) Aug 12 01:08:28 capella kdeinit5[2024]: kscreen: Requesting missing EDID for outputs (88) Aug 12 01:08:28 capella kdeinit5[2024]: kscreen.kded: Failed to find a matching mode - this means that our config is corruptedor a different device with the same serial number has been connected (very unlikely).Falling back to preferred modes. Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: XRandR::setConfig Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Requested screen size is QSize(1920, 1080) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Needed CRTCs: 1 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Actions to perform: Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Primary Output: true Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Old: 0 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: New: 88 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Change Screen Size: true Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Old: QSize(1920, 1200) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Intermediate: QSize(1920, 1200) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: New: QSize(1920, 1080) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Disable outputs: false Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Change outputs: false Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Enable outputs: true Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: (88) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: QMap((79, XRandRCrtc(0x55b964f599f0))(80, XRandRCrtc(0x55b964f506a0))(81, XRandRCrtc(0x55b964f51ab0))(82, XRandRCrtc(0x55b964f50bc0))(83, XRandRCrtc(0x55b964f51390))(84, XRandRCrtc(0x55b964f51340))) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Testing CRTC 79 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Free: true Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Mode: 0 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Possible outputs: QVector(85, 86, 87, 88, 89) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Connected outputs: QVector() Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Geometry: QRect(0,0 0x0) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: RRSetCrtcConfig (enable output) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Output: 88 ( "HDMI-A-1" ) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: New CRTC: 79 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Pos: QPoint(0,0) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Mode: KScreen::Mode(Id: "1770" , Size: QSize(1920, 1080) @ 59.9502 ) Preferred: "1770" Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Rotation: 1 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Result: 0 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: XRandROutput 88 update Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: m_connected: 0 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: m_crtc QObject(0x0) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: CRTC: 79 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: MODE: 1770 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Connection: 0 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Primary: true Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Connected output 88 to CRTC 79 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: RRSetOutputPrimary Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: New primary: 88 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: RRSetScreenSize Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: DPI: 96.1514 Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: Size: QSize(1920, 1080) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: SizeMM: QSize(507, 285) Aug 12 01:08:28 capella kscreen_backend_launcher[2116]: kscreen.xrandr: XRandR::setConfig done!
Hi Michael, in order to work at boot time, you have to add your edid file to your initrd or initramfs. Don't know, what distribution you are using, but if it uses dracut, then you should create a file /etc/dracut.conf.d/99-edid.conf (the filename is arbitrary, but it must have the suffix ".conf") with the following content: install_items+=" /lib/firmware/edid/mizapfmon.bin " and then run mkinitrd. But as I've said, this didn't fix the issue for me. Lothar
Maybe this is another indication that something goes wrong: (screen at 1920x1200) michael@capella:~> xrandr --verbose | grep EDID -A16 EDID: 00ffffffffffff00412f271001010101 0019010380362378eece50a3544c9926 0f5054a56b808140a900a940b300d100 010101010101283c80a070b023403020 360022602100001a000000fc00565358 2d3333300a2020202020000000fd0030 551e4611000a202020202020000000ff 00504c43393333303134470a202001a6 020334714b010204850610111314151f 38097f070f7f071507503e06c0497f00 5706005f7e01677e00834f000066030c 00110080011d8018711c1620582c2500 06442100009e011d80d0721c1620102c 258006442100009e011d007251d01e20 6e28550006442100001e011d00bc52d0 1e20b828554006442100001e0000008f (turn off monitor, turn on again, screen now reset to 1920x1080) michael@capella:~> xrandr --verbose | grep EDID -A16 michael@capella:~> That is, there is no EDID data anymore. --- I was looking for some tool to read the EDID channel, but I was not yet successful. I am using openSUSE. I tried to download and compile read-edid, but I get an error message from cmake about a missing setting of X86_LIBRARY. Then I found a python tool on Github (edid-rw), but I cannot find the smbus python module (not in the repositories).
Just installed openSUSE with kernel 4.18; the issue seems to be fixed! Let me check with my office PC (in about a week) before declaring it resolved.
Unfortunately, the issue isn't fixed with kernel 4.18. I've also upgraded my OpenSuse Tumbleweed, but the behavior is the same as before. The screen resolution is correct after switching the monitor off and on about 4-5 times, but it's wrong again after the next power cycle. My workaround is to execute xset dpms force off instead of pressing the power key of the monitor. But sometimes even this doesn't work. It only happens very seldom, but then the screen is only partially blanked and the monitor doesn't go into power save mode. I have to execute the xset command again to make it work.
On my office PC with 4K monitor, the issue is now also gone. That is, I have no more evidence of that resolution reset on any of my computers.
(In reply to Michael Zapf from comment #19) > On my office PC with 4K monitor, the issue is now also gone. That is, I have > no more evidence of that resolution reset on any of my computers. Excellent, thanks for the follow-up! Resolving this report accordingly. Lothar, if you're still having issues, please file your own report.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.