Description
Samsung Smart TV (M50D, 1920x1080@60Hz) connected via HDMI produces ~0.2s black screen flashes on every mouse click / window interaction. The same hardware, kernel, driver, cable, and HDMI port work perfectly under Sway 1.11 and in TTY, isolating the issue to Aquamarine's DRM handling.
Root Cause Analysis
DRM atomic traces (drm.debug=0x10) show that connector state is included in every page-flip commit, which triggers drm_atomic_helper_check_modeset on every frame:
drm_atomic_get_plane_state Added [PLANE:90:plane 1B] state
drm_atomic_get_crtc_state Added [CRTC:145:pipe B] state
drm_atomic_set_fb_for_plane Set [FB:307] for [PLANE:90:plane 1B]
drm_atomic_get_connector_state Added [CONNECTOR:271:HDMI-A-1] state <-- should not be here on a page-flip
drm_atomic_helper_check_modeset Updating routing for [CONNECTOR:271:HDMI-A-1]
[CONNECTOR:271:HDMI-A-1] keeps [ENCODER:270:DDI B/PHY B], now on [CRTC:145:pipe B]
In wlroots (Sway's backend), page-flip commits typically include only plane and CRTC state — connector state is only added during actual mode changes. The Samsung TV appears to interpret the resulting AVI InfoFrame updates as a signal renegotiation, causing a brief blank.
Startup logs also show repeated:
ERR from aquamarine ]: drm: Cannot commit when a page-flip is awaiting
Environment
| Component |
Detail |
| Aquamarine |
0.10.0-2 |
| Hyprland |
0.53.3-2 |
| Kernel |
6.18.9-arch1-2 |
| GPU |
Intel Raptor Lake-P Iris Xe (i915) |
| Display |
Samsung Smart M50D 32" (1920x1080@60Hz, HDMI) |
| Distro |
Arch Linux |
Flicker Matrix
| Compositor |
Result |
| TTY (fbcon) |
No flicker |
| Sway 1.11 |
No flicker |
| Hyprland 0.53.3 |
Flickers |
A different monitor (Xiaomi) works fine on the same Hyprland setup, confirming this is a Samsung-specific sensitivity to the connector state in commits.
Ruled Out
All of the following were tested with no improvement:
- Hyprland settings: blur, animations, hardware cursors, damage tracking, color management, direct scanout, VFR, VRR — all disabled individually
- Aquamarine env vars:
AQ_NO_ATOMIC=1, AQ_NO_MODIFIERS=1
- Refresh rates: 60Hz, 59.94Hz, 50Hz
- Kernel params:
i915.enable_psr=0 i915.enable_fbc=0 i915.enable_dc=0
- EDID overrides: Stripped deep color, ALLM, HDR, BT2020, game content type
- HDCP: Content Protection = Undesired
- Hardware: Multiple HDMI cables and TV ports
- Multi-monitor: Flickers even as the sole display
DRM Connector Properties
Broadcast RGB: Automatic (0)
content type: Graphics (1)
Content Protection: Undesired (0)
max bpc: 8
Colorspace: Default (0)
HDR_OUTPUT_METADATA: (empty)
Suspected Fix
Aquamarine should avoid adding connector state to atomic commits when only performing a page-flip (no mode/connector property change). Properties like content_type, Colorspace, and HDR_OUTPUT_METADATA should only be included when they actually change.
This would align with wlroots behavior and prevent sensitive displays (Samsung TVs) from interpreting every frame as a signal renegotiation.
Related Issues
Description
Samsung Smart TV (M50D, 1920x1080@60Hz) connected via HDMI produces ~0.2s black screen flashes on every mouse click / window interaction. The same hardware, kernel, driver, cable, and HDMI port work perfectly under Sway 1.11 and in TTY, isolating the issue to Aquamarine's DRM handling.
Root Cause Analysis
DRM atomic traces (
drm.debug=0x10) show that connector state is included in every page-flip commit, which triggersdrm_atomic_helper_check_modeseton every frame:In wlroots (Sway's backend), page-flip commits typically include only plane and CRTC state — connector state is only added during actual mode changes. The Samsung TV appears to interpret the resulting AVI InfoFrame updates as a signal renegotiation, causing a brief blank.
Startup logs also show repeated:
Environment
Flicker Matrix
A different monitor (Xiaomi) works fine on the same Hyprland setup, confirming this is a Samsung-specific sensitivity to the connector state in commits.
Ruled Out
All of the following were tested with no improvement:
AQ_NO_ATOMIC=1,AQ_NO_MODIFIERS=1i915.enable_psr=0 i915.enable_fbc=0 i915.enable_dc=0DRM Connector Properties
Suspected Fix
Aquamarine should avoid adding connector state to atomic commits when only performing a page-flip (no mode/connector property change). Properties like
content_type,Colorspace, andHDR_OUTPUT_METADATAshould only be included when they actually change.This would align with wlroots behavior and prevent sensitive displays (Samsung TVs) from interpreting every frame as a signal renegotiation.
Related Issues
"Cannot commit when a page-flip is awaiting"error, but triggered by hotplug (different trigger, possibly related code path)