Try to force YCbCr 4:4:4 instead of RGB:
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 7816b2a..758f3dc 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2196,7 +2196,7 @@ intel_hdmi_output_format(struct intel_connector *connector,
if (connector->base.ycbcr_420_allowed && ycbcr_420_output)
return INTEL_OUTPUT_FORMAT_YCBCR420;
else
- return INTEL_OUTPUT_FORMAT_RGB;
+ return INTEL_OUTPUT_FORMAT_YCBCR444;
}
static int intel_hdmi_compute_output_format(struct intel_encoder *encoder,
@@ -2215,8 +2215,8 @@ static int intel_hdmi_compute_output_format(struct intel_encoder *encoder,
if (ycbcr_420_only && crtc_state->sink_format != INTEL_OUTPUT_FORMAT_YCBCR420) {
drm_dbg_kms(&i915->drm,
- "YCbCr 4:2:0 mode but YCbCr 4:2:0 output not possible. Falling back to RGB.\n");
- crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
+ "YCbCr 4:2:0 mode but YCbCr 4:2:0 output not possible. Falling back to YCBCR444.\n");
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR444;
}
crtc_state->output_format = intel_hdmi_output_format(crtc_state);
@@ -2247,7 +2247,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
return -EINVAL;
- pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
+ pipe_config->output_format = INTEL_OUTPUT_FORMAT_YCBCR444;
if (pipe_config->has_hdmi_sink)
pipe_config->has_infoframe = true;
Display More
Other things to try: force 10-bit and 8-bit 2160p @ 23,976 Hz mode instead of default 12-bit (with libdrm proptest tool).
Also worth trying a custom EDID with "SCDC Present" bit set to "disabled".
IMO those dropouts are data errors related to Intel HDMI 2.0 implementation.