* [Intel-gfx] [PATCH v10 01/13] drm/i915/display: Add new member to configure PCON color conversion
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 02/13] drm/i915/display: Add new member in intel_dp to store ycbcr420 passthrough cap Ankit Nautiyal
` (13 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
The decision to use DFP output format conversion capabilities should be
during compute_config phase.
This patch adds new member to crtc_state to represent the final
output_format to the sink. In case of a DFP this can be different than
the output_format, as per the format conversion done via the PCON.
This will help to store only the format conversion capabilities of the
DP device in intel_dp->dfp, and use crtc_state to compute and store the
configuration for color/format conversion for a given mode.
v2: modified the new member to crtc_state to represent the final
output_format that eaches the sink, after possible conversion by
PCON kind of devices. (Ville)
v3: Addressed comments from Ville:
-Added comments to clarify difference between sink_format and
output_format.
-Corrected the order of setting sink_format and output_format.
-Added readout for sink_format in get_pipe_config hooks.
v4: Set sink_format for intel_sdvo too. (Ville)
v5: Rebased.
v6: Fixed condition to go for YCbCr420 format for dp and hdmi. (Ville)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> (v3)
---
drivers/gpu/drm/i915/display/icl_dsi.c | 1 +
drivers/gpu/drm/i915/display/intel_crt.c | 1 +
.../drm/i915/display/intel_crtc_state_dump.c | 5 +--
drivers/gpu/drm/i915/display/intel_display.c | 5 +++
.../drm/i915/display/intel_display_types.h | 11 ++++++-
drivers/gpu/drm/i915/display/intel_dp.c | 33 +++++++++++++------
drivers/gpu/drm/i915/display/intel_dp_mst.c | 1 +
drivers/gpu/drm/i915/display/intel_dvo.c | 1 +
drivers/gpu/drm/i915/display/intel_hdmi.c | 23 +++++++------
drivers/gpu/drm/i915/display/intel_lvds.c | 1 +
drivers/gpu/drm/i915/display/intel_sdvo.c | 1 +
drivers/gpu/drm/i915/display/intel_tv.c | 1 +
drivers/gpu/drm/i915/display/vlv_dsi.c | 1 +
13 files changed, 62 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
index b5316715bb3b..8fef5afe7abc 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -1580,6 +1580,7 @@ static int gen11_dsi_compute_config(struct intel_encoder *encoder,
&pipe_config->hw.adjusted_mode;
int ret;
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
ret = intel_panel_compute_config(intel_connector, adjusted_mode);
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 8f2ebead0826..e925e21d87fc 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -393,6 +393,7 @@ static int intel_crt_compute_config(struct intel_encoder *encoder,
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
return -EINVAL;
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
index 766633566fd6..185cd1971aa5 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
@@ -178,10 +178,11 @@ void intel_crtc_state_dump(const struct intel_crtc_state *pipe_config,
snprintf_output_types(buf, sizeof(buf), pipe_config->output_types);
drm_dbg_kms(&i915->drm,
- "active: %s, output_types: %s (0x%x), output format: %s\n",
+ "active: %s, output_types: %s (0x%x), output format: %s, sink format: %s\n",
str_yes_no(pipe_config->hw.active),
buf, pipe_config->output_types,
- output_formats(pipe_config->output_format));
+ output_formats(pipe_config->output_format),
+ output_formats(pipe_config->sink_format));
drm_dbg_kms(&i915->drm,
"cpu_transcoder: %s, pipe bpp: %i, dithering: %i\n",
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index a1fbdf32bd21..9fdb6cc06b67 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -3126,6 +3126,7 @@ static bool i9xx_get_pipe_config(struct intel_crtc *crtc,
return false;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
+ pipe_config->sink_format = pipe_config->output_format;
pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
pipe_config->shared_dpll = NULL;
@@ -3585,6 +3586,8 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc,
break;
}
+ pipe_config->sink_format = pipe_config->output_format;
+
pipe_config->gamma_mode = REG_FIELD_GET(TRANSCONF_GAMMA_MODE_MASK_ILK, tmp);
pipe_config->framestart_delay = REG_FIELD_GET(TRANSCONF_FRAME_START_DELAY_MASK, tmp) + 1;
@@ -3983,6 +3986,8 @@ static bool hsw_get_pipe_config(struct intel_crtc *crtc,
bdw_get_pipemisc_output_format(crtc);
}
+ pipe_config->sink_format = pipe_config->output_format;
+
pipe_config->gamma_mode = intel_de_read(dev_priv,
GAMMA_MODE(crtc->pipe));
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 748b0cd411fa..c28835d9db6f 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1273,9 +1273,18 @@ struct intel_crtc_state {
/* HDMI High TMDS char rate ratio */
bool hdmi_high_tmds_clock_ratio;
- /* Output format RGB/YCBCR etc */
+ /*
+ * Output format RGB/YCBCR etc., that is coming out
+ * at the end of the pipe.
+ */
enum intel_output_format output_format;
+ /*
+ * Sink output format RGB/YCBCR etc., that is going
+ * into the sink.
+ */
+ enum intel_output_format sink_format;
+
/* enable pipe gamma? */
bool gamma_enable;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index d25a93258f8b..1a30cc021b25 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -806,11 +806,12 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
static enum intel_output_format
intel_dp_output_format(struct intel_connector *connector,
- bool ycbcr_420_output)
+ enum intel_output_format sink_format)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
- if (!connector->base.ycbcr_420_allowed || !ycbcr_420_output)
+ if (!connector->base.ycbcr_420_allowed ||
+ sink_format != INTEL_OUTPUT_FORMAT_YCBCR420)
return INTEL_OUTPUT_FORMAT_RGB;
if (intel_dp->dfp.rgb_to_ycbcr &&
@@ -849,8 +850,14 @@ intel_dp_mode_min_output_bpp(struct intel_connector *connector,
const struct drm_display_mode *mode)
{
const struct drm_display_info *info = &connector->base.display_info;
- enum intel_output_format output_format =
- intel_dp_output_format(connector, drm_mode_is_420_only(info, mode));
+ enum intel_output_format output_format, sink_format;
+
+ if (drm_mode_is_420_only(info, mode))
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ else
+ sink_format = INTEL_OUTPUT_FORMAT_RGB;
+
+ output_format = intel_dp_output_format(connector, sink_format);
return intel_dp_output_bpp(output_format, intel_dp_min_bpp(output_format));
}
@@ -2035,23 +2042,29 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
ycbcr_420_only = drm_mode_is_420_only(info, adjusted_mode);
- crtc_state->output_format = intel_dp_output_format(connector, ycbcr_420_only);
-
- if (ycbcr_420_only && !intel_dp_is_ycbcr420(intel_dp, crtc_state)) {
+ if (ycbcr_420_only && !connector->base.ycbcr_420_allowed) {
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->output_format = INTEL_OUTPUT_FORMAT_RGB;
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
+ } else if (ycbcr_420_only) {
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ } else {
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
}
+ crtc_state->output_format = intel_dp_output_format(connector, crtc_state->sink_format);
+
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
respect_downstream_limits);
if (ret) {
- if (intel_dp_is_ycbcr420(intel_dp, crtc_state) ||
+ if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
!connector->base.ycbcr_420_allowed ||
!drm_mode_is_420_also(info, adjusted_mode))
return ret;
- crtc_state->output_format = intel_dp_output_format(connector, true);
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ crtc_state->output_format = intel_dp_output_format(connector,
+ crtc_state->sink_format);
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
respect_downstream_limits);
}
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index a860cbc5dbea..ff0b821a901a 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -293,6 +293,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
return -EINVAL;
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->has_pch_encoder = false;
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
index eb2dcd866cc8..9884678743b6 100644
--- a/drivers/gpu/drm/i915/display/intel_dvo.c
+++ b/drivers/gpu/drm/i915/display/intel_dvo.c
@@ -271,6 +271,7 @@ static int intel_dvo_compute_config(struct intel_encoder *encoder,
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
return -EINVAL;
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index c7e9e1fbed37..1ad0540c13ee 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2171,13 +2171,13 @@ static bool intel_hdmi_has_audio(struct intel_encoder *encoder,
static enum intel_output_format
intel_hdmi_output_format(const struct intel_crtc_state *crtc_state,
- struct intel_connector *connector,
- bool ycbcr_420_output)
+ struct intel_connector *connector)
{
if (!crtc_state->has_hdmi_sink)
return INTEL_OUTPUT_FORMAT_RGB;
- if (connector->base.ycbcr_420_allowed && ycbcr_420_output)
+ if (connector->base.ycbcr_420_allowed &&
+ crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
return INTEL_OUTPUT_FORMAT_YCBCR420;
else
return INTEL_OUTPUT_FORMAT_RGB;
@@ -2195,23 +2195,26 @@ static int intel_hdmi_compute_output_format(struct intel_encoder *encoder,
bool ycbcr_420_only = drm_mode_is_420_only(info, adjusted_mode);
int ret;
- crtc_state->output_format =
- intel_hdmi_output_format(crtc_state, connector, ycbcr_420_only);
-
- if (ycbcr_420_only && !intel_hdmi_is_ycbcr420(crtc_state)) {
+ if (ycbcr_420_only && !connector->base.ycbcr_420_allowed) {
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->output_format = INTEL_OUTPUT_FORMAT_RGB;
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
+ } else if (ycbcr_420_only) {
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ } else {
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
}
+ crtc_state->output_format = intel_hdmi_output_format(crtc_state, connector);
ret = intel_hdmi_compute_clock(encoder, crtc_state, respect_downstream_limits);
if (ret) {
- if (intel_hdmi_is_ycbcr420(crtc_state) ||
+ if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
!connector->base.ycbcr_420_allowed ||
!drm_mode_is_420_also(info, adjusted_mode))
return ret;
- crtc_state->output_format = intel_hdmi_output_format(crtc_state, connector, true);
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ crtc_state->output_format = intel_hdmi_output_format(crtc_state, connector);
ret = intel_hdmi_compute_clock(encoder, crtc_state, respect_downstream_limits);
}
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index a504b3a7fbd5..a7783da37dfd 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -436,6 +436,7 @@ static int intel_lvds_compute_config(struct intel_encoder *encoder,
crtc_state->pipe_bpp = lvds_bpp;
}
+ crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
crtc_state->output_format = INTEL_OUTPUT_FORMAT_RGB;
/*
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index e12ba458636c..34ee9dd82a78 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -1351,6 +1351,7 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
DRM_DEBUG_KMS("forcing bpc to 8 for SDVO\n");
pipe_config->pipe_bpp = 8*3;
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
if (HAS_PCH_SPLIT(to_i915(encoder->base.dev)))
diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
index 3b5ff84dc615..6f7ac225293e 100644
--- a/drivers/gpu/drm/i915/display/intel_tv.c
+++ b/drivers/gpu/drm/i915/display/intel_tv.c
@@ -1204,6 +1204,7 @@ intel_tv_compute_config(struct intel_encoder *encoder,
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
return -EINVAL;
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
drm_dbg_kms(&dev_priv->drm, "forcing bpc to 8 for TV\n");
diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
index 8d2e6e151ba0..82c30feb7a91 100644
--- a/drivers/gpu/drm/i915/display/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
@@ -280,6 +280,7 @@ static int intel_dsi_compute_config(struct intel_encoder *encoder,
int ret;
drm_dbg_kms(&dev_priv->drm, "\n");
+ pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
ret = intel_panel_compute_config(intel_connector, adjusted_mode);
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 02/13] drm/i915/display: Add new member in intel_dp to store ycbcr420 passthrough cap
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 01/13] drm/i915/display: Add new member to configure PCON color conversion Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output Ankit Nautiyal
` (12 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
New member to store the YCBCR20 Pass through capability of the DP sink.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_types.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index c28835d9db6f..1be15a1caa39 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1733,6 +1733,7 @@ struct intel_dp {
int pcon_max_frl_bw;
u8 max_bpc;
bool ycbcr_444_to_420;
+ bool ycbcr420_passthrough;
bool rgb_to_ycbcr;
} dfp;
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 01/13] drm/i915/display: Add new member to configure PCON color conversion Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 02/13] drm/i915/display: Add new member in intel_dp to store ycbcr420 passthrough cap Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-03-08 15:10 ` Ville Syrjälä
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 04/13] drm/i915/dp: Replace intel_dp.dfp members with the new crtc_state sink_format Ankit Nautiyal
` (11 subsequent siblings)
14 siblings, 1 reply; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
For YCbCr420 output, scaler is required for downsampling.
Scaler can be used only when source size smaller than max_src_w and
max_src_h as defined by for the platform.
So go for native YCbCr420 only if there are no scaler constraints.
v2: Corrected max-width based on Display Version.
v3: Updated max-width as per latest Bspec change.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 41 ++++++++++++++++++++++---
1 file changed, 37 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 1a30cc021b25..e95fc0f0d13a 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -804,11 +804,36 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
return 0;
}
+static bool
+ycbcr420_scaler_constraints(struct drm_i915_private *i915,
+ const struct drm_display_mode *mode)
+{
+ int max_src_w, max_src_h;
+
+ if (DISPLAY_VER(i915) < 11) {
+ max_src_w = 4096;
+ max_src_h = 4096;
+ } else if (DISPLAY_VER(i915) < 12) {
+ max_src_w = 5120;
+ max_src_h = 4096;
+ } else if (DISPLAY_VER(i915) < 14) {
+ max_src_w = 5120;
+ max_src_h = 8192;
+ } else {
+ max_src_w = 4096;
+ max_src_h = 8192;
+ }
+
+ return mode->hdisplay > max_src_w || mode->vdisplay > max_src_h;
+}
+
static enum intel_output_format
intel_dp_output_format(struct intel_connector *connector,
+ const struct drm_display_mode *mode,
enum intel_output_format sink_format)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct drm_i915_private *i915 = to_i915(connector->base.dev);
if (!connector->base.ycbcr_420_allowed ||
sink_format != INTEL_OUTPUT_FORMAT_YCBCR420)
@@ -820,8 +845,15 @@ intel_dp_output_format(struct intel_connector *connector,
if (intel_dp->dfp.ycbcr_444_to_420)
return INTEL_OUTPUT_FORMAT_YCBCR444;
- else
+
+ /*
+ * For YCbCr420 output, scaler is required for downsampling
+ * So go for native YCbCr420 only if there are no scaler constraints.
+ */
+ if (!ycbcr420_scaler_constraints(i915, mode))
return INTEL_OUTPUT_FORMAT_YCBCR420;
+
+ return INTEL_OUTPUT_FORMAT_RGB;
}
int intel_dp_min_bpp(enum intel_output_format output_format)
@@ -857,7 +889,7 @@ intel_dp_mode_min_output_bpp(struct intel_connector *connector,
else
sink_format = INTEL_OUTPUT_FORMAT_RGB;
- output_format = intel_dp_output_format(connector, sink_format);
+ output_format = intel_dp_output_format(connector, mode, sink_format);
return intel_dp_output_bpp(output_format, intel_dp_min_bpp(output_format));
}
@@ -2052,7 +2084,8 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
}
- crtc_state->output_format = intel_dp_output_format(connector, crtc_state->sink_format);
+ crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
+ crtc_state->sink_format);
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
respect_downstream_limits);
@@ -2063,7 +2096,7 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
return ret;
crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
- crtc_state->output_format = intel_dp_output_format(connector,
+ crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
crtc_state->sink_format);
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
respect_downstream_limits);
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* Re: [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output Ankit Nautiyal
@ 2023-03-08 15:10 ` Ville Syrjälä
2023-03-08 15:26 ` Ville Syrjälä
0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2023-03-08 15:10 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-gfx
On Mon, Feb 27, 2023 at 09:33:14AM +0530, Ankit Nautiyal wrote:
> For YCbCr420 output, scaler is required for downsampling.
> Scaler can be used only when source size smaller than max_src_w and
> max_src_h as defined by for the platform.
> So go for native YCbCr420 only if there are no scaler constraints.
>
> v2: Corrected max-width based on Display Version.
>
> v3: Updated max-width as per latest Bspec change.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp.c | 41 ++++++++++++++++++++++---
> 1 file changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 1a30cc021b25..e95fc0f0d13a 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -804,11 +804,36 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
> return 0;
> }
>
> +static bool
> +ycbcr420_scaler_constraints(struct drm_i915_private *i915,
> + const struct drm_display_mode *mode)
> +{
> + int max_src_w, max_src_h;
> +
> + if (DISPLAY_VER(i915) < 11) {
> + max_src_w = 4096;
> + max_src_h = 4096;
> + } else if (DISPLAY_VER(i915) < 12) {
> + max_src_w = 5120;
> + max_src_h = 4096;
> + } else if (DISPLAY_VER(i915) < 14) {
> + max_src_w = 5120;
> + max_src_h = 8192;
> + } else {
> + max_src_w = 4096;
> + max_src_h = 8192;
> + }
> +
> + return mode->hdisplay > max_src_w || mode->vdisplay > max_src_h;
> +}
> +
I don't really like this. If we do something like this
then it should be the scaler code that checks this stuff.
However, after pondering about this more I'm actually
leaning towards using 4:4:4 output whenever possible,
only going for 4:2:0 if absolutely necessary. That
avoids having to deal with all the annoying scaler/etc
limitations.
> static enum intel_output_format
> intel_dp_output_format(struct intel_connector *connector,
> + const struct drm_display_mode *mode,
> enum intel_output_format sink_format)
> {
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> + struct drm_i915_private *i915 = to_i915(connector->base.dev);
>
> if (!connector->base.ycbcr_420_allowed ||
> sink_format != INTEL_OUTPUT_FORMAT_YCBCR420)
> @@ -820,8 +845,15 @@ intel_dp_output_format(struct intel_connector *connector,
>
> if (intel_dp->dfp.ycbcr_444_to_420)
> return INTEL_OUTPUT_FORMAT_YCBCR444;
> - else
> +
> + /*
> + * For YCbCr420 output, scaler is required for downsampling
> + * So go for native YCbCr420 only if there are no scaler constraints.
> + */
> + if (!ycbcr420_scaler_constraints(i915, mode))
> return INTEL_OUTPUT_FORMAT_YCBCR420;
> +
> + return INTEL_OUTPUT_FORMAT_RGB;
> }
>
> int intel_dp_min_bpp(enum intel_output_format output_format)
> @@ -857,7 +889,7 @@ intel_dp_mode_min_output_bpp(struct intel_connector *connector,
> else
> sink_format = INTEL_OUTPUT_FORMAT_RGB;
>
> - output_format = intel_dp_output_format(connector, sink_format);
> + output_format = intel_dp_output_format(connector, mode, sink_format);
>
> return intel_dp_output_bpp(output_format, intel_dp_min_bpp(output_format));
> }
> @@ -2052,7 +2084,8 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
> crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
> }
>
> - crtc_state->output_format = intel_dp_output_format(connector, crtc_state->sink_format);
> + crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
> + crtc_state->sink_format);
>
> ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
> respect_downstream_limits);
> @@ -2063,7 +2096,7 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
> return ret;
>
> crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
> - crtc_state->output_format = intel_dp_output_format(connector,
> + crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
> crtc_state->sink_format);
> ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
> respect_downstream_limits);
> --
> 2.25.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output
2023-03-08 15:10 ` Ville Syrjälä
@ 2023-03-08 15:26 ` Ville Syrjälä
2023-03-09 8:31 ` Nautiyal, Ankit K
0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2023-03-08 15:26 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-gfx
On Wed, Mar 08, 2023 at 05:10:57PM +0200, Ville Syrjälä wrote:
> On Mon, Feb 27, 2023 at 09:33:14AM +0530, Ankit Nautiyal wrote:
> > For YCbCr420 output, scaler is required for downsampling.
> > Scaler can be used only when source size smaller than max_src_w and
> > max_src_h as defined by for the platform.
> > So go for native YCbCr420 only if there are no scaler constraints.
> >
> > v2: Corrected max-width based on Display Version.
> >
> > v3: Updated max-width as per latest Bspec change.
> >
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_dp.c | 41 ++++++++++++++++++++++---
> > 1 file changed, 37 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 1a30cc021b25..e95fc0f0d13a 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -804,11 +804,36 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
> > return 0;
> > }
> >
> > +static bool
> > +ycbcr420_scaler_constraints(struct drm_i915_private *i915,
> > + const struct drm_display_mode *mode)
> > +{
> > + int max_src_w, max_src_h;
> > +
> > + if (DISPLAY_VER(i915) < 11) {
> > + max_src_w = 4096;
> > + max_src_h = 4096;
> > + } else if (DISPLAY_VER(i915) < 12) {
> > + max_src_w = 5120;
> > + max_src_h = 4096;
> > + } else if (DISPLAY_VER(i915) < 14) {
> > + max_src_w = 5120;
> > + max_src_h = 8192;
> > + } else {
> > + max_src_w = 4096;
> > + max_src_h = 8192;
> > + }
> > +
> > + return mode->hdisplay > max_src_w || mode->vdisplay > max_src_h;
> > +}
> > +
>
> I don't really like this. If we do something like this
> then it should be the scaler code that checks this stuff.
>
> However, after pondering about this more I'm actually
> leaning towards using 4:4:4 output whenever possible,
> only going for 4:2:0 if absolutely necessary. That
> avoids having to deal with all the annoying scaler/etc
> limitations.
In fact perhaps best to try RGB first (also avoids the whole
pipe CSC mess on glk), then YCbCr 4:4:4 (still avoids the
scaler mess), and finally accepting that we need to do
native YCbCr 4:2:0 output.
>
> > static enum intel_output_format
> > intel_dp_output_format(struct intel_connector *connector,
> > + const struct drm_display_mode *mode,
> > enum intel_output_format sink_format)
> > {
> > struct intel_dp *intel_dp = intel_attached_dp(connector);
> > + struct drm_i915_private *i915 = to_i915(connector->base.dev);
> >
> > if (!connector->base.ycbcr_420_allowed ||
> > sink_format != INTEL_OUTPUT_FORMAT_YCBCR420)
> > @@ -820,8 +845,15 @@ intel_dp_output_format(struct intel_connector *connector,
> >
> > if (intel_dp->dfp.ycbcr_444_to_420)
> > return INTEL_OUTPUT_FORMAT_YCBCR444;
> > - else
> > +
> > + /*
> > + * For YCbCr420 output, scaler is required for downsampling
> > + * So go for native YCbCr420 only if there are no scaler constraints.
> > + */
> > + if (!ycbcr420_scaler_constraints(i915, mode))
> > return INTEL_OUTPUT_FORMAT_YCBCR420;
> > +
> > + return INTEL_OUTPUT_FORMAT_RGB;
> > }
> >
> > int intel_dp_min_bpp(enum intel_output_format output_format)
> > @@ -857,7 +889,7 @@ intel_dp_mode_min_output_bpp(struct intel_connector *connector,
> > else
> > sink_format = INTEL_OUTPUT_FORMAT_RGB;
> >
> > - output_format = intel_dp_output_format(connector, sink_format);
> > + output_format = intel_dp_output_format(connector, mode, sink_format);
> >
> > return intel_dp_output_bpp(output_format, intel_dp_min_bpp(output_format));
> > }
> > @@ -2052,7 +2084,8 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
> > crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
> > }
> >
> > - crtc_state->output_format = intel_dp_output_format(connector, crtc_state->sink_format);
> > + crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
> > + crtc_state->sink_format);
> >
> > ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
> > respect_downstream_limits);
> > @@ -2063,7 +2096,7 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
> > return ret;
> >
> > crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
> > - crtc_state->output_format = intel_dp_output_format(connector,
> > + crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
> > crtc_state->sink_format);
> > ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
> > respect_downstream_limits);
> > --
> > 2.25.1
>
> --
> Ville Syrjälä
> Intel
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output
2023-03-08 15:26 ` Ville Syrjälä
@ 2023-03-09 8:31 ` Nautiyal, Ankit K
2023-03-09 10:21 ` Ville Syrjälä
0 siblings, 1 reply; 20+ messages in thread
From: Nautiyal, Ankit K @ 2023-03-09 8:31 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
Hi Ville,
Thanks for the comments and suggestions. Please find my response inline:
On 3/8/2023 8:56 PM, Ville Syrjälä wrote:
> On Wed, Mar 08, 2023 at 05:10:57PM +0200, Ville Syrjälä wrote:
>> On Mon, Feb 27, 2023 at 09:33:14AM +0530, Ankit Nautiyal wrote:
>>> For YCbCr420 output, scaler is required for downsampling.
>>> Scaler can be used only when source size smaller than max_src_w and
>>> max_src_h as defined by for the platform.
>>> So go for native YCbCr420 only if there are no scaler constraints.
>>>
>>> v2: Corrected max-width based on Display Version.
>>>
>>> v3: Updated max-width as per latest Bspec change.
>>>
>>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>> ---
>>> drivers/gpu/drm/i915/display/intel_dp.c | 41 ++++++++++++++++++++++---
>>> 1 file changed, 37 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
>>> index 1a30cc021b25..e95fc0f0d13a 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_dp.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
>>> @@ -804,11 +804,36 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
>>> return 0;
>>> }
>>>
>>> +static bool
>>> +ycbcr420_scaler_constraints(struct drm_i915_private *i915,
>>> + const struct drm_display_mode *mode)
>>> +{
>>> + int max_src_w, max_src_h;
>>> +
>>> + if (DISPLAY_VER(i915) < 11) {
>>> + max_src_w = 4096;
>>> + max_src_h = 4096;
>>> + } else if (DISPLAY_VER(i915) < 12) {
>>> + max_src_w = 5120;
>>> + max_src_h = 4096;
>>> + } else if (DISPLAY_VER(i915) < 14) {
>>> + max_src_w = 5120;
>>> + max_src_h = 8192;
>>> + } else {
>>> + max_src_w = 4096;
>>> + max_src_h = 8192;
>>> + }
>>> +
>>> + return mode->hdisplay > max_src_w || mode->vdisplay > max_src_h;
>>> +}
>>> +
>> I don't really like this. If we do something like this
>> then it should be the scaler code that checks this stuff.
Makes sense, this does belong to the scaler file and scaler checks.
>>
>> However, after pondering about this more I'm actually
>> leaning towards using 4:4:4 output whenever possible,
>> only going for 4:2:0 if absolutely necessary. That
>> avoids having to deal with all the annoying scaler/etc
>> limitations.
> In fact perhaps best to try RGB first (also avoids the whole
> pipe CSC mess on glk), then YCbCr 4:4:4 (still avoids the
> scaler mess), and finally accepting that we need to do
> native YCbCr 4:2:0 output.
Ok so if I understand correctly, in intel_dp_output_format()
If sink_format is YCBCR420:
-first try with output_format as RGB and RGB->YCBCR420 conv via DFP (if
conv supported)
-Or else try with output_format as YCBCR444 and use YCBCR444->YCBCR420
conv via DFP (if conv supported)
-else try with output_format YCBCR420.
If there are indeed scaler constraints, those are to be taken care in
scaler check code.
Shall I drop the scaler constraint for now and have that as a separate
series?
Regards,
Ankit
>
>>> static enum intel_output_format
>>> intel_dp_output_format(struct intel_connector *connector,
>>> + const struct drm_display_mode *mode,
>>> enum intel_output_format sink_format)
>>> {
>>> struct intel_dp *intel_dp = intel_attached_dp(connector);
>>> + struct drm_i915_private *i915 = to_i915(connector->base.dev);
>>>
>>> if (!connector->base.ycbcr_420_allowed ||
>>> sink_format != INTEL_OUTPUT_FORMAT_YCBCR420)
>>> @@ -820,8 +845,15 @@ intel_dp_output_format(struct intel_connector *connector,
>>>
>>> if (intel_dp->dfp.ycbcr_444_to_420)
>>> return INTEL_OUTPUT_FORMAT_YCBCR444;
>>> - else
>>> +
>>> + /*
>>> + * For YCbCr420 output, scaler is required for downsampling
>>> + * So go for native YCbCr420 only if there are no scaler constraints.
>>> + */
>>> + if (!ycbcr420_scaler_constraints(i915, mode))
>>> return INTEL_OUTPUT_FORMAT_YCBCR420;
>>> +
>>> + return INTEL_OUTPUT_FORMAT_RGB;
>>> }
>>>
>>> int intel_dp_min_bpp(enum intel_output_format output_format)
>>> @@ -857,7 +889,7 @@ intel_dp_mode_min_output_bpp(struct intel_connector *connector,
>>> else
>>> sink_format = INTEL_OUTPUT_FORMAT_RGB;
>>>
>>> - output_format = intel_dp_output_format(connector, sink_format);
>>> + output_format = intel_dp_output_format(connector, mode, sink_format);
>>>
>>> return intel_dp_output_bpp(output_format, intel_dp_min_bpp(output_format));
>>> }
>>> @@ -2052,7 +2084,8 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
>>> crtc_state->sink_format = INTEL_OUTPUT_FORMAT_RGB;
>>> }
>>>
>>> - crtc_state->output_format = intel_dp_output_format(connector, crtc_state->sink_format);
>>> + crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
>>> + crtc_state->sink_format);
>>>
>>> ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
>>> respect_downstream_limits);
>>> @@ -2063,7 +2096,7 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
>>> return ret;
>>>
>>> crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
>>> - crtc_state->output_format = intel_dp_output_format(connector,
>>> + crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
>>> crtc_state->sink_format);
>>> ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
>>> respect_downstream_limits);
>>> --
>>> 2.25.1
>> --
>> Ville Syrjälä
>> Intel
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output
2023-03-09 8:31 ` Nautiyal, Ankit K
@ 2023-03-09 10:21 ` Ville Syrjälä
0 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjälä @ 2023-03-09 10:21 UTC (permalink / raw)
To: Nautiyal, Ankit K; +Cc: intel-gfx
On Thu, Mar 09, 2023 at 02:01:06PM +0530, Nautiyal, Ankit K wrote:
> Hi Ville,
>
> Thanks for the comments and suggestions. Please find my response inline:
>
> On 3/8/2023 8:56 PM, Ville Syrjälä wrote:
> > On Wed, Mar 08, 2023 at 05:10:57PM +0200, Ville Syrjälä wrote:
> >> On Mon, Feb 27, 2023 at 09:33:14AM +0530, Ankit Nautiyal wrote:
> >>> For YCbCr420 output, scaler is required for downsampling.
> >>> Scaler can be used only when source size smaller than max_src_w and
> >>> max_src_h as defined by for the platform.
> >>> So go for native YCbCr420 only if there are no scaler constraints.
> >>>
> >>> v2: Corrected max-width based on Display Version.
> >>>
> >>> v3: Updated max-width as per latest Bspec change.
> >>>
> >>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> >>> ---
> >>> drivers/gpu/drm/i915/display/intel_dp.c | 41 ++++++++++++++++++++++---
> >>> 1 file changed, 37 insertions(+), 4 deletions(-)
> >>>
> >>> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> >>> index 1a30cc021b25..e95fc0f0d13a 100644
> >>> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> >>> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> >>> @@ -804,11 +804,36 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
> >>> return 0;
> >>> }
> >>>
> >>> +static bool
> >>> +ycbcr420_scaler_constraints(struct drm_i915_private *i915,
> >>> + const struct drm_display_mode *mode)
> >>> +{
> >>> + int max_src_w, max_src_h;
> >>> +
> >>> + if (DISPLAY_VER(i915) < 11) {
> >>> + max_src_w = 4096;
> >>> + max_src_h = 4096;
> >>> + } else if (DISPLAY_VER(i915) < 12) {
> >>> + max_src_w = 5120;
> >>> + max_src_h = 4096;
> >>> + } else if (DISPLAY_VER(i915) < 14) {
> >>> + max_src_w = 5120;
> >>> + max_src_h = 8192;
> >>> + } else {
> >>> + max_src_w = 4096;
> >>> + max_src_h = 8192;
> >>> + }
> >>> +
> >>> + return mode->hdisplay > max_src_w || mode->vdisplay > max_src_h;
> >>> +}
> >>> +
> >> I don't really like this. If we do something like this
> >> then it should be the scaler code that checks this stuff.
>
> Makes sense, this does belong to the scaler file and scaler checks.
>
>
> >>
> >> However, after pondering about this more I'm actually
> >> leaning towards using 4:4:4 output whenever possible,
> >> only going for 4:2:0 if absolutely necessary. That
> >> avoids having to deal with all the annoying scaler/etc
> >> limitations.
> > In fact perhaps best to try RGB first (also avoids the whole
> > pipe CSC mess on glk), then YCbCr 4:4:4 (still avoids the
> > scaler mess), and finally accepting that we need to do
> > native YCbCr 4:2:0 output.
>
> Ok so if I understand correctly, in intel_dp_output_format()
>
> If sink_format is YCBCR420:
>
> -first try with output_format as RGB and RGB->YCBCR420 conv via DFP (if
> conv supported)
>
> -Or else try with output_format as YCBCR444 and use YCBCR444->YCBCR420
> conv via DFP (if conv supported)
>
> -else try with output_format YCBCR420.
Yeah something along those lines. Maybe it can be expressed
in a pretty generic way even:
if (sink_format=RGB||dfp_can_convert_from_rgb(sink_format))
return RGB;
if (sink_format=YCbCr444||dfp_can_convert_from_ycbcr444(sink_format))
return YCbCr444;
return sink_format;
>
> If there are indeed scaler constraints, those are to be taken care in
> scaler check code.
>
> Shall I drop the scaler constraint for now and have that as a separate
> series?
Don't we already have sufficient checks in the scaler code?
Well, if not a separate series for that seems better.
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v10 04/13] drm/i915/dp: Replace intel_dp.dfp members with the new crtc_state sink_format
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (2 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 03/13] drm/i915/dp: Add Scaler constraint for YCbCr420 output Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 05/13] drm/i915/dp: Compute output format with/without DSC Ankit Nautiyal
` (10 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
The decision to use DFP output format conversion capabilities should be
during compute_config phase.
This patch uses the members of intel_dp->dfp to only store the
format conversion capabilities of the DP device and uses the crtc_state
sink_format member, to program the protocol-converter for
colorspace/format conversion.
v2: Use sink_format to determine the color conversion config for the
pcon (Ville).
v3: Fix typo: missing 'break' in switch case (lkp kernel test robot).
v4: Add helper to check if DP supports YCBCR420.
v5: Simplify logic for computing output_format, based on the given
sink_format. (Ville).
Added scaler constraint for YCbCr420 output.
v6: Split the patch for Scaler constraint for Ycbcr420.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 192 +++++++++++++++++-------
1 file changed, 135 insertions(+), 57 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index e95fc0f0d13a..1314d02778d5 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -804,6 +804,67 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
return 0;
}
+static bool source_can_output(struct intel_dp *intel_dp,
+ enum intel_output_format format)
+{
+ struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+ bool is_branch = drm_dp_is_branch(intel_dp->dpcd);
+
+ if (format == INTEL_OUTPUT_FORMAT_RGB)
+ return true;
+
+ /*
+ * No YCbCr output support on gmch platforms.
+ * Also, ILK doesn't seem capable of DP YCbCr output.
+ * The displayed image is severly corrupted. SNB+ is fine.
+ */
+ if (HAS_GMCH(i915) || IS_IRONLAKE(i915))
+ return false;
+
+ if (format == INTEL_OUTPUT_FORMAT_YCBCR444)
+ return true;
+
+ /* Platform < Gen 11 cannot output YCbCr420 format */
+ if (DISPLAY_VER(i915) < 11)
+ return false;
+
+ /* If branch device then PCONs should support YCbCr420 Passthrough */
+ if (format == INTEL_OUTPUT_FORMAT_YCBCR420)
+ return !is_branch || intel_dp->dfp.ycbcr420_passthrough;
+
+ return false;
+}
+
+static bool
+dfp_can_convert_from_rgb(struct intel_dp *intel_dp,
+ enum intel_output_format sink_format)
+{
+ if (!drm_dp_is_branch(intel_dp->dpcd))
+ return false;
+
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR444)
+ return intel_dp->dfp.rgb_to_ycbcr;
+
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
+ return intel_dp->dfp.rgb_to_ycbcr &&
+ intel_dp->dfp.ycbcr_444_to_420;
+
+ return false;
+}
+
+static bool
+dfp_can_convert_from_ycbcr444(struct intel_dp *intel_dp,
+ enum intel_output_format sink_format)
+{
+ if (!drm_dp_is_branch(intel_dp->dpcd))
+ return false;
+
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
+ return intel_dp->dfp.ycbcr_444_to_420;
+
+ return false;
+}
+
static bool
ycbcr420_scaler_constraints(struct drm_i915_private *i915,
const struct drm_display_mode *mode)
@@ -835,24 +896,23 @@ intel_dp_output_format(struct intel_connector *connector,
struct intel_dp *intel_dp = intel_attached_dp(connector);
struct drm_i915_private *i915 = to_i915(connector->base.dev);
- if (!connector->base.ycbcr_420_allowed ||
- sink_format != INTEL_OUTPUT_FORMAT_YCBCR420)
- return INTEL_OUTPUT_FORMAT_RGB;
+ /*
+ * For YCbCr420 output, scaler is required for downsampling.
+ * So go for native YCbCr420 only if there are no scaler constraints.
+ */
+ if ((sink_format != INTEL_OUTPUT_FORMAT_YCBCR420 ||
+ !ycbcr420_scaler_constraints(i915, mode)) &&
+ source_can_output(intel_dp, sink_format))
+ return sink_format;
- if (intel_dp->dfp.rgb_to_ycbcr &&
- intel_dp->dfp.ycbcr_444_to_420)
+ if (source_can_output(intel_dp, INTEL_OUTPUT_FORMAT_RGB) &&
+ dfp_can_convert_from_rgb(intel_dp, sink_format))
return INTEL_OUTPUT_FORMAT_RGB;
- if (intel_dp->dfp.ycbcr_444_to_420)
+ if (source_can_output(intel_dp, INTEL_OUTPUT_FORMAT_YCBCR444) &&
+ dfp_can_convert_from_ycbcr444(intel_dp, sink_format))
return INTEL_OUTPUT_FORMAT_YCBCR444;
- /*
- * For YCbCr420 output, scaler is required for downsampling
- * So go for native YCbCr420 only if there are no scaler constraints.
- */
- if (!ycbcr420_scaler_constraints(i915, mode))
- return INTEL_OUTPUT_FORMAT_YCBCR420;
-
return INTEL_OUTPUT_FORMAT_RGB;
}
@@ -2774,6 +2834,8 @@ void intel_dp_configure_protocol_converter(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+ bool ycbcr444_to_420 = false;
+ bool rgb_to_ycbcr = false;
u8 tmp;
if (intel_dp->dpcd[DP_DPCD_REV] < 0x13)
@@ -2790,8 +2852,35 @@ void intel_dp_configure_protocol_converter(struct intel_dp *intel_dp,
drm_dbg_kms(&i915->drm, "Failed to %s protocol converter HDMI mode\n",
str_enable_disable(intel_dp->has_hdmi_sink));
- tmp = crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444 &&
- intel_dp->dfp.ycbcr_444_to_420 ? DP_CONVERSION_TO_YCBCR420_ENABLE : 0;
+ if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420) {
+ switch (crtc_state->output_format) {
+ case INTEL_OUTPUT_FORMAT_YCBCR420:
+ /*
+ * sink_format is YCbCr420, output_format is also YCbCr420:
+ * Passthrough.
+ */
+ break;
+ case INTEL_OUTPUT_FORMAT_YCBCR444:
+ /*
+ * sink_format is YCbCr420, output_format is YCbCr444:
+ * Downsample.
+ */
+ ycbcr444_to_420 = true;
+ break;
+ case INTEL_OUTPUT_FORMAT_RGB:
+ /*
+ * sink_format is YCbCr420, output_format is RGB:
+ * Convert to YCbCr444 and Downsample.
+ */
+ rgb_to_ycbcr = true;
+ ycbcr444_to_420 = true;
+ break;
+ default:
+ break;
+ }
+ }
+
+ tmp = ycbcr444_to_420 ? DP_CONVERSION_TO_YCBCR420_ENABLE : 0;
if (drm_dp_dpcd_writeb(&intel_dp->aux,
DP_PROTOCOL_CONVERTER_CONTROL_1, tmp) != 1)
@@ -2799,13 +2888,12 @@ void intel_dp_configure_protocol_converter(struct intel_dp *intel_dp,
"Failed to %s protocol converter YCbCr 4:2:0 conversion mode\n",
str_enable_disable(intel_dp->dfp.ycbcr_444_to_420));
- tmp = intel_dp->dfp.rgb_to_ycbcr ?
- DP_CONVERSION_BT709_RGB_YCBCR_ENABLE : 0;
+ tmp = rgb_to_ycbcr ? DP_CONVERSION_BT709_RGB_YCBCR_ENABLE : 0;
if (drm_dp_pcon_convert_rgb_to_ycbcr(&intel_dp->aux, tmp) < 0)
drm_dbg_kms(&i915->drm,
- "Failed to %s protocol converter RGB->YCbCr conversion mode\n",
- str_enable_disable(tmp));
+ "Failed to %s protocol converter RGB->YCbCr conversion mode\n",
+ str_enable_disable(tmp));
}
bool intel_dp_get_colorimetry_status(struct intel_dp *intel_dp)
@@ -4595,57 +4683,47 @@ intel_dp_update_dfp(struct intel_dp *intel_dp,
intel_dp_get_pcon_dsc_cap(intel_dp);
}
+static bool
+intel_dp_can_ycbcr420(struct intel_dp *intel_dp)
+{
+ if (source_can_output(intel_dp, INTEL_OUTPUT_FORMAT_YCBCR420))
+ return true;
+ /*
+ * If source cannot support YCbCr420, and PCON has color conv. support:
+ * Source sends YCbCr444, PCON converts YCbCr444->420 Or
+ * Source sends RGB444, PCON converts RGB->YCbCr444 + YCbCr444->YCbCr420)
+ */
+ if (source_can_output(intel_dp, INTEL_OUTPUT_FORMAT_RGB) &&
+ dfp_can_convert_from_rgb(intel_dp, INTEL_OUTPUT_FORMAT_YCBCR420))
+ return true;
+
+ if (source_can_output(intel_dp, INTEL_OUTPUT_FORMAT_YCBCR444) &&
+ dfp_can_convert_from_ycbcr444(intel_dp, INTEL_OUTPUT_FORMAT_YCBCR420))
+ return INTEL_OUTPUT_FORMAT_YCBCR444;
+
+ return false;
+}
+
static void
intel_dp_update_420(struct intel_dp *intel_dp)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
struct intel_connector *connector = intel_dp->attached_connector;
- bool is_branch, ycbcr_420_passthrough, ycbcr_444_to_420, rgb_to_ycbcr;
-
- /* No YCbCr output support on gmch platforms */
- if (HAS_GMCH(i915))
- return;
-
- /*
- * ILK doesn't seem capable of DP YCbCr output. The
- * displayed image is severly corrupted. SNB+ is fine.
- */
- if (IS_IRONLAKE(i915))
- return;
- is_branch = drm_dp_is_branch(intel_dp->dpcd);
- ycbcr_420_passthrough =
+ intel_dp->dfp.ycbcr420_passthrough =
drm_dp_downstream_420_passthrough(intel_dp->dpcd,
intel_dp->downstream_ports);
/* on-board LSPCON always assumed to support 4:4:4->4:2:0 conversion */
- ycbcr_444_to_420 =
+ intel_dp->dfp.ycbcr_444_to_420 =
dp_to_dig_port(intel_dp)->lspcon.active ||
drm_dp_downstream_444_to_420_conversion(intel_dp->dpcd,
intel_dp->downstream_ports);
- rgb_to_ycbcr = drm_dp_downstream_rgb_to_ycbcr_conversion(intel_dp->dpcd,
- intel_dp->downstream_ports,
- DP_DS_HDMI_BT709_RGB_YCBCR_CONV);
-
- if (DISPLAY_VER(i915) >= 11) {
- /* Let PCON convert from RGB->YCbCr if possible */
- if (is_branch && rgb_to_ycbcr && ycbcr_444_to_420) {
- intel_dp->dfp.rgb_to_ycbcr = true;
- intel_dp->dfp.ycbcr_444_to_420 = true;
- connector->base.ycbcr_420_allowed = true;
- } else {
- /* Prefer 4:2:0 passthrough over 4:4:4->4:2:0 conversion */
- intel_dp->dfp.ycbcr_444_to_420 =
- ycbcr_444_to_420 && !ycbcr_420_passthrough;
+ intel_dp->dfp.rgb_to_ycbcr =
+ drm_dp_downstream_rgb_to_ycbcr_conversion(intel_dp->dpcd,
+ intel_dp->downstream_ports,
+ DP_DS_HDMI_BT709_RGB_YCBCR_CONV);
- connector->base.ycbcr_420_allowed =
- !is_branch || ycbcr_444_to_420 || ycbcr_420_passthrough;
- }
- } else {
- /* 4:4:4->4:2:0 conversion is the only way */
- intel_dp->dfp.ycbcr_444_to_420 = ycbcr_444_to_420;
-
- connector->base.ycbcr_420_allowed = ycbcr_444_to_420;
- }
+ connector->base.ycbcr_420_allowed = intel_dp_can_ycbcr420(intel_dp);
drm_dbg_kms(&i915->drm,
"[CONNECTOR:%d:%s] RGB->YcbCr conversion? %s, YCbCr 4:2:0 allowed? %s, YCbCr 4:4:4->4:2:0 conversion? %s\n",
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 05/13] drm/i915/dp: Compute output format with/without DSC
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (3 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 04/13] drm/i915/dp: Replace intel_dp.dfp members with the new crtc_state sink_format Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 06/13] drm/i915/display: Use sink_format instead of ycbcr420_output flag Ankit Nautiyal
` (9 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Currently we compute the output format first and later try DSC if the
bandwidth without compression is not sufficient for that output format.
Since we do not support DSC with YCbCr420 format, this creates problem
for YCbCr420 only modes, that can be still be set if DFP has color
conversion and DSC capabilities.
So compute output format, first without DSC and inturn compute the link
config without DSC. If cannot be supported without DSC, compute the
output format with DSC and continue.
With this apporach, check can be added for YCbCr420 output, which cannot
be supported with DSC.
v2: Rebased
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 84 ++++++++++++++++++-------
1 file changed, 61 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 1314d02778d5..4455f3ae1830 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -888,20 +888,37 @@ ycbcr420_scaler_constraints(struct drm_i915_private *i915,
return mode->hdisplay > max_src_w || mode->vdisplay > max_src_h;
}
+static bool
+ycbcr420_constraints(struct drm_i915_private *i915,
+ const struct drm_display_mode *mode,
+ bool with_dsc)
+{
+ /*
+ * DSC with YCbCr420 is a constraint as currently we do not support compression
+ * with 420 format.
+ */
+ if (with_dsc)
+ return true;
+
+ return ycbcr420_scaler_constraints(i915, mode);
+}
+
static enum intel_output_format
intel_dp_output_format(struct intel_connector *connector,
const struct drm_display_mode *mode,
- enum intel_output_format sink_format)
+ enum intel_output_format sink_format,
+ bool with_dsc)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
struct drm_i915_private *i915 = to_i915(connector->base.dev);
/*
* For YCbCr420 output, scaler is required for downsampling.
- * So go for native YCbCr420 only if there are no scaler constraints.
+ * DSC1.1 supports compression only with 444 formats.
+ * So go for native YCbCr420 only if there are no scaler and dsc constraints.
*/
if ((sink_format != INTEL_OUTPUT_FORMAT_YCBCR420 ||
- !ycbcr420_scaler_constraints(i915, mode)) &&
+ !ycbcr420_constraints(i915, mode, with_dsc)) &&
source_can_output(intel_dp, sink_format))
return sink_format;
@@ -949,7 +966,7 @@ intel_dp_mode_min_output_bpp(struct intel_connector *connector,
else
sink_format = INTEL_OUTPUT_FORMAT_RGB;
- output_format = intel_dp_output_format(connector, mode, sink_format);
+ output_format = intel_dp_output_format(connector, mode, sink_format, false);
return intel_dp_output_bpp(output_format, intel_dp_min_bpp(output_format));
}
@@ -1731,7 +1748,8 @@ static int
intel_dp_compute_link_config(struct intel_encoder *encoder,
struct intel_crtc_state *pipe_config,
struct drm_connector_state *conn_state,
- bool respect_downstream_limits)
+ bool respect_downstream_limits,
+ bool with_dsc)
{
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
@@ -1742,6 +1760,20 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
bool joiner_needs_dsc = false;
int ret;
+ if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay,
+ adjusted_mode->crtc_clock))
+ pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe);
+
+ /*
+ * Pipe joiner needs compression up to display 12 due to bandwidth
+ * limitation. DG2 onwards pipe joiner can be enabled without
+ * compression.
+ */
+ joiner_needs_dsc = DISPLAY_VER(i915) < 13 && pipe_config->bigjoiner_pipes;
+
+ if (joiner_needs_dsc && !with_dsc)
+ return -EINVAL;
+
limits.min_rate = intel_dp_common_rate(intel_dp, 0);
limits.max_rate = intel_dp_max_link_rate(intel_dp);
@@ -1771,23 +1803,15 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
limits.max_lane_count, limits.max_rate,
limits.max_bpp, adjusted_mode->crtc_clock);
- if (intel_dp_need_bigjoiner(intel_dp, adjusted_mode->crtc_hdisplay,
- adjusted_mode->crtc_clock))
- pipe_config->bigjoiner_pipes = GENMASK(crtc->pipe + 1, crtc->pipe);
-
- /*
- * Pipe joiner needs compression up to display 12 due to bandwidth
- * limitation. DG2 onwards pipe joiner can be enabled without
- * compression.
- */
- joiner_needs_dsc = DISPLAY_VER(i915) < 13 && pipe_config->bigjoiner_pipes;
-
/*
* Optimize for slow and wide for everything, because there are some
* eDP 1.3 and 1.4 panels don't work well with fast and narrow.
*/
ret = intel_dp_compute_link_config_wide(intel_dp, pipe_config, conn_state, &limits);
+ if (ret && !with_dsc)
+ return -EINVAL;
+
if (ret || joiner_needs_dsc || intel_dp->force_dsc_en) {
drm_dbg_kms(&i915->drm, "Try DSC (fallback=%s, joiner=%s, force=%s)\n",
str_yes_no(ret), str_yes_no(joiner_needs_dsc),
@@ -2122,7 +2146,8 @@ static int
intel_dp_compute_output_format(struct intel_encoder *encoder,
struct intel_crtc_state *crtc_state,
struct drm_connector_state *conn_state,
- bool respect_downstream_limits)
+ bool respect_downstream_limits,
+ bool with_dsc)
{
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
@@ -2145,10 +2170,10 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
}
crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
- crtc_state->sink_format);
+ crtc_state->sink_format, with_dsc);
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
- respect_downstream_limits);
+ respect_downstream_limits, with_dsc);
if (ret) {
if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
!connector->base.ycbcr_420_allowed ||
@@ -2157,9 +2182,10 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
crtc_state->sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
crtc_state->output_format = intel_dp_output_format(connector, adjusted_mode,
- crtc_state->sink_format);
+ crtc_state->sink_format,
+ with_dsc);
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
- respect_downstream_limits);
+ respect_downstream_limits, with_dsc);
}
return ret;
@@ -2225,9 +2251,21 @@ intel_dp_compute_config(struct intel_encoder *encoder,
* Try to respect downstream TMDS clock limits first, if
* that fails assume the user might know something we don't.
*/
- ret = intel_dp_compute_output_format(encoder, pipe_config, conn_state, true);
+ ret = intel_dp_compute_output_format(encoder, pipe_config,
+ conn_state, true, false);
if (ret)
- ret = intel_dp_compute_output_format(encoder, pipe_config, conn_state, false);
+ ret = intel_dp_compute_output_format(encoder, pipe_config,
+ conn_state, false, false);
+
+ /* Try with DSC */
+ if (ret) {
+ ret = intel_dp_compute_output_format(encoder, pipe_config,
+ conn_state, true, true);
+ if (ret)
+ ret = intel_dp_compute_output_format(encoder, pipe_config,
+ conn_state, false, true);
+ }
+
if (ret)
return ret;
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 06/13] drm/i915/display: Use sink_format instead of ycbcr420_output flag
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (4 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 05/13] drm/i915/dp: Compute output format with/without DSC Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 07/13] drm/i915/dp: Rearrange check for illegal mode and comments in mode_valid Ankit Nautiyal
` (8 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Start passing the sink_format, to all functions that take a bool
ycbcr420_output as parameter. This will make the functions generic,
and will serve as a slight step towards 4:2:2 support later.
v2: Rebased.
Suggested-by: Ville Syrj_l_ <ville.syrjala@linux.intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 33 +++++++--------
drivers/gpu/drm/i915/display/intel_hdmi.c | 50 ++++++++++++-----------
drivers/gpu/drm/i915/display/intel_hdmi.h | 5 ++-
3 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 4455f3ae1830..f03254cd0daf 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1005,7 +1005,8 @@ static int intel_dp_max_tmds_clock(struct intel_dp *intel_dp)
static enum drm_mode_status
intel_dp_tmds_clock_valid(struct intel_dp *intel_dp,
- int clock, int bpc, bool ycbcr420_output,
+ int clock, int bpc,
+ enum intel_output_format sink_format,
bool respect_downstream_limits)
{
int tmds_clock, min_tmds_clock, max_tmds_clock;
@@ -1013,7 +1014,7 @@ intel_dp_tmds_clock_valid(struct intel_dp *intel_dp,
if (!respect_downstream_limits)
return MODE_OK;
- tmds_clock = intel_hdmi_tmds_clock(clock, bpc, ycbcr420_output);
+ tmds_clock = intel_hdmi_tmds_clock(clock, bpc, sink_format);
min_tmds_clock = intel_dp->dfp.min_tmds_clock;
max_tmds_clock = intel_dp_max_tmds_clock(intel_dp);
@@ -1036,6 +1037,7 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
const struct drm_display_info *info = &connector->base.display_info;
enum drm_mode_status status;
bool ycbcr_420_only;
+ enum intel_output_format sink_format;
/* If PCON supports FRL MODE, check FRL bandwidth constraints */
if (intel_dp->dfp.pcon_max_frl_bw) {
@@ -1062,18 +1064,22 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
ycbcr_420_only = drm_mode_is_420_only(info, mode);
+ if (ycbcr_420_only && connector->base.ycbcr_420_allowed)
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ else
+ sink_format = INTEL_OUTPUT_FORMAT_RGB;
+
/* Assume 8bpc for the DP++/HDMI/DVI TMDS clock check */
status = intel_dp_tmds_clock_valid(intel_dp, target_clock,
- 8, ycbcr_420_only, true);
+ 8, sink_format, true);
if (status != MODE_OK) {
- if (ycbcr_420_only ||
- !connector->base.ycbcr_420_allowed ||
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
!drm_mode_is_420_also(info, mode))
return status;
-
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
status = intel_dp_tmds_clock_valid(intel_dp, target_clock,
- 8, true, true);
+ 8, sink_format, true);
if (status != MODE_OK)
return status;
}
@@ -1309,19 +1315,10 @@ static bool intel_dp_supports_dsc(struct intel_dp *intel_dp,
drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd);
}
-static bool intel_dp_is_ycbcr420(struct intel_dp *intel_dp,
- const struct intel_crtc_state *crtc_state)
-{
- return crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
- (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444 &&
- intel_dp->dfp.ycbcr_444_to_420);
-}
-
static int intel_dp_hdmi_compute_bpc(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state,
int bpc, bool respect_downstream_limits)
{
- bool ycbcr420_output = intel_dp_is_ycbcr420(intel_dp, crtc_state);
int clock = crtc_state->hw.adjusted_mode.crtc_clock;
/*
@@ -1341,8 +1338,8 @@ static int intel_dp_hdmi_compute_bpc(struct intel_dp *intel_dp,
for (; bpc >= 8; bpc -= 2) {
if (intel_hdmi_bpc_possible(crtc_state, bpc,
- intel_dp->has_hdmi_sink, ycbcr420_output) &&
- intel_dp_tmds_clock_valid(intel_dp, clock, bpc, ycbcr420_output,
+ intel_dp->has_hdmi_sink) &&
+ intel_dp_tmds_clock_valid(intel_dp, clock, bpc, crtc_state->sink_format,
respect_downstream_limits) == MODE_OK)
return bpc;
}
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 1ad0540c13ee..15bf64a217c2 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1793,11 +1793,6 @@ static bool intel_has_hdmi_sink(struct intel_hdmi *hdmi,
READ_ONCE(to_intel_digital_connector_state(conn_state)->force_audio) != HDMI_AUDIO_OFF_DVI;
}
-static bool intel_hdmi_is_ycbcr420(const struct intel_crtc_state *crtc_state)
-{
- return crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420;
-}
-
static int hdmi_port_clock_limit(struct intel_hdmi *hdmi,
bool respect_downstream_limits,
bool has_hdmi_sink)
@@ -1871,10 +1866,11 @@ hdmi_port_clock_valid(struct intel_hdmi *hdmi,
return MODE_OK;
}
-int intel_hdmi_tmds_clock(int clock, int bpc, bool ycbcr420_output)
+int intel_hdmi_tmds_clock(int clock, int bpc,
+ enum intel_output_format sink_format)
{
/* YCBCR420 TMDS rate requirement is half the pixel clock */
- if (ycbcr420_output)
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
clock /= 2;
/*
@@ -1901,7 +1897,8 @@ static bool intel_hdmi_source_bpc_possible(struct drm_i915_private *i915, int bp
}
static bool intel_hdmi_sink_bpc_possible(struct drm_connector *connector,
- int bpc, bool has_hdmi_sink, bool ycbcr420_output)
+ int bpc, bool has_hdmi_sink,
+ enum intel_output_format sink_format)
{
const struct drm_display_info *info = &connector->display_info;
const struct drm_hdmi_info *hdmi = &info->hdmi;
@@ -1911,7 +1908,7 @@ static bool intel_hdmi_sink_bpc_possible(struct drm_connector *connector,
if (!has_hdmi_sink)
return false;
- if (ycbcr420_output)
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
return hdmi->y420_dc_modes & DRM_EDID_YCBCR420_DC_36;
else
return info->edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_36;
@@ -1919,7 +1916,7 @@ static bool intel_hdmi_sink_bpc_possible(struct drm_connector *connector,
if (!has_hdmi_sink)
return false;
- if (ycbcr420_output)
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
return hdmi->y420_dc_modes & DRM_EDID_YCBCR420_DC_30;
else
return info->edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_30;
@@ -1933,7 +1930,8 @@ static bool intel_hdmi_sink_bpc_possible(struct drm_connector *connector,
static enum drm_mode_status
intel_hdmi_mode_clock_valid(struct drm_connector *connector, int clock,
- bool has_hdmi_sink, bool ycbcr420_output)
+ bool has_hdmi_sink,
+ enum intel_output_format sink_format)
{
struct drm_i915_private *i915 = to_i915(connector->dev);
struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
@@ -1946,12 +1944,12 @@ intel_hdmi_mode_clock_valid(struct drm_connector *connector, int clock,
* least one color depth is accepted.
*/
for (bpc = 12; bpc >= 8; bpc -= 2) {
- int tmds_clock = intel_hdmi_tmds_clock(clock, bpc, ycbcr420_output);
+ int tmds_clock = intel_hdmi_tmds_clock(clock, bpc, sink_format);
if (!intel_hdmi_source_bpc_possible(i915, bpc))
continue;
- if (!intel_hdmi_sink_bpc_possible(connector, bpc, has_hdmi_sink, ycbcr420_output))
+ if (!intel_hdmi_sink_bpc_possible(connector, bpc, has_hdmi_sink, sink_format))
continue;
status = hdmi_port_clock_valid(hdmi, tmds_clock, true, has_hdmi_sink);
@@ -1976,6 +1974,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
bool has_hdmi_sink = intel_has_hdmi_sink(hdmi, connector->state);
bool ycbcr_420_only;
+ enum intel_output_format sink_format;
if ((mode->flags & DRM_MODE_FLAG_3D_MASK) == DRM_MODE_FLAG_3D_FRAME_PACKING)
clock *= 2;
@@ -2000,14 +1999,17 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
ycbcr_420_only = drm_mode_is_420_only(&connector->display_info, mode);
- status = intel_hdmi_mode_clock_valid(connector, clock, has_hdmi_sink, ycbcr_420_only);
+ sink_format = ycbcr_420_only ? INTEL_OUTPUT_FORMAT_YCBCR420 : INTEL_OUTPUT_FORMAT_RGB;
+
+ status = intel_hdmi_mode_clock_valid(connector, clock, has_hdmi_sink, sink_format);
if (status != MODE_OK) {
if (ycbcr_420_only ||
!connector->ycbcr_420_allowed ||
!drm_mode_is_420_also(&connector->display_info, mode))
return status;
- status = intel_hdmi_mode_clock_valid(connector, clock, has_hdmi_sink, true);
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ status = intel_hdmi_mode_clock_valid(connector, clock, has_hdmi_sink, sink_format);
if (status != MODE_OK)
return status;
}
@@ -2016,7 +2018,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector,
}
bool intel_hdmi_bpc_possible(const struct intel_crtc_state *crtc_state,
- int bpc, bool has_hdmi_sink, bool ycbcr420_output)
+ int bpc, bool has_hdmi_sink)
{
struct drm_atomic_state *state = crtc_state->uapi.state;
struct drm_connector_state *connector_state;
@@ -2027,7 +2029,8 @@ bool intel_hdmi_bpc_possible(const struct intel_crtc_state *crtc_state,
if (connector_state->crtc != crtc_state->uapi.crtc)
continue;
- if (!intel_hdmi_sink_bpc_possible(connector, bpc, has_hdmi_sink, ycbcr420_output))
+ if (!intel_hdmi_sink_bpc_possible(connector, bpc, has_hdmi_sink,
+ crtc_state->sink_format))
return false;
}
@@ -2045,14 +2048,13 @@ static bool hdmi_bpc_possible(const struct intel_crtc_state *crtc_state, int bpc
return false;
/* Display Wa_1405510057:icl,ehl */
- if (intel_hdmi_is_ycbcr420(crtc_state) &&
+ if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 &&
bpc == 10 && DISPLAY_VER(dev_priv) == 11 &&
(adjusted_mode->crtc_hblank_end -
adjusted_mode->crtc_hblank_start) % 8 == 2)
return false;
- return intel_hdmi_bpc_possible(crtc_state, bpc, crtc_state->has_hdmi_sink,
- intel_hdmi_is_ycbcr420(crtc_state));
+ return intel_hdmi_bpc_possible(crtc_state, bpc, crtc_state->has_hdmi_sink);
}
static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
@@ -2060,7 +2062,6 @@ static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
int clock, bool respect_downstream_limits)
{
struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
- bool ycbcr420_output = intel_hdmi_is_ycbcr420(crtc_state);
int bpc;
/*
@@ -2078,7 +2079,8 @@ static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,
bpc = 8;
for (; bpc >= 8; bpc -= 2) {
- int tmds_clock = intel_hdmi_tmds_clock(clock, bpc, ycbcr420_output);
+ int tmds_clock = intel_hdmi_tmds_clock(clock, bpc,
+ crtc_state->sink_format);
if (hdmi_bpc_possible(crtc_state, bpc) &&
hdmi_port_clock_valid(intel_hdmi, tmds_clock,
@@ -2108,7 +2110,7 @@ static int intel_hdmi_compute_clock(struct intel_encoder *encoder,
return bpc;
crtc_state->port_clock =
- intel_hdmi_tmds_clock(clock, bpc, intel_hdmi_is_ycbcr420(crtc_state));
+ intel_hdmi_tmds_clock(clock, bpc, crtc_state->sink_format);
/*
* pipe_bpp could already be below 8bpc due to
@@ -2293,7 +2295,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
return ret;
}
- if (intel_hdmi_is_ycbcr420(pipe_config)) {
+ if (pipe_config->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420) {
ret = intel_panel_fitting(pipe_config, conn_state);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h b/drivers/gpu/drm/i915/display/intel_hdmi.h
index 774dda2376ed..d1e27247b657 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.h
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.h
@@ -9,6 +9,7 @@
#include <linux/types.h>
enum hdmi_infoframe_type;
+enum intel_output_format;
enum port;
struct drm_connector;
struct drm_connector_state;
@@ -45,8 +46,8 @@ void intel_read_infoframe(struct intel_encoder *encoder,
bool intel_hdmi_limited_color_range(const struct intel_crtc_state *crtc_state,
const struct drm_connector_state *conn_state);
bool intel_hdmi_bpc_possible(const struct intel_crtc_state *crtc_state,
- int bpc, bool has_hdmi_sink, bool ycbcr420_output);
-int intel_hdmi_tmds_clock(int clock, int bpc, bool ycbcr420_output);
+ int bpc, bool has_hdmi_sink);
+int intel_hdmi_tmds_clock(int clock, int bpc, enum intel_output_format sink_format);
int intel_hdmi_dsc_get_bpp(int src_fractional_bpp, int slice_width,
int num_slices, int output_format, bool hdmi_all_bpp,
int hdmi_max_chunk_bytes);
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 07/13] drm/i915/dp: Rearrange check for illegal mode and comments in mode_valid
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (5 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 06/13] drm/i915/display: Use sink_format instead of ycbcr420_output flag Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 08/13] drm/i915/dp: Consider output_format while computing dsc bpp for mode_valid Ankit Nautiyal
` (7 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Check for MODE_H_ILLEGAL before calculating max rates, lanes etc.
Move comments about compressed bpp U6.4 format closer to where it is used.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index f03254cd0daf..87a7cb4649be 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1136,6 +1136,9 @@ intel_dp_mode_valid(struct drm_connector *_connector,
if (target_clock > max_dotclk)
return MODE_CLOCK_HIGH;
+ if (intel_dp_hdisplay_bad(dev_priv, mode->hdisplay))
+ return MODE_H_ILLEGAL;
+
max_link_clock = intel_dp_max_link_rate(intel_dp);
max_lanes = intel_dp_max_lane_count(intel_dp);
@@ -1143,13 +1146,6 @@ intel_dp_mode_valid(struct drm_connector *_connector,
mode_rate = intel_dp_link_required(target_clock,
intel_dp_mode_min_output_bpp(connector, mode));
- if (intel_dp_hdisplay_bad(dev_priv, mode->hdisplay))
- return MODE_H_ILLEGAL;
-
- /*
- * Output bpp is stored in 6.4 format so right shift by 4 to get the
- * integer value since we support only integer values of bpp.
- */
if (HAS_DSC(dev_priv) &&
drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)) {
/*
@@ -1158,6 +1154,10 @@ intel_dp_mode_valid(struct drm_connector *_connector,
*/
int pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, U8_MAX);
+ /*
+ * Output bpp is stored in 6.4 format so right shift by 4 to get the
+ * integer value since we support only integer values of bpp.
+ */
if (intel_dp_is_edp(intel_dp)) {
dsc_max_output_bpp =
drm_edp_dsc_sink_output_bpp(intel_dp->dsc_dpcd) >> 4;
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 08/13] drm/i915/dp: Consider output_format while computing dsc bpp for mode_valid
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (6 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 07/13] drm/i915/dp: Rearrange check for illegal mode and comments in mode_valid Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 09/13] drm/i915/display: Add helper function to check if sink_format is 420 Ankit Nautiyal
` (6 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
During modevalid step, the pipe bpp is computed assuming RGB output
format. When checking with DSC, consider the output_format and compute
the input bpp for DSC appropriately.
v2: For DP-MST we currently use RGB output format only, so continue
using RGB while computing dsc_bpp for MST case.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 28 ++++++++++++++++-----
drivers/gpu/drm/i915/display/intel_dp.h | 4 ++-
drivers/gpu/drm/i915/display/intel_dp_mst.c | 2 +-
3 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 87a7cb4649be..59919ad03a26 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1148,11 +1148,21 @@ intel_dp_mode_valid(struct drm_connector *_connector,
if (HAS_DSC(dev_priv) &&
drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)) {
+ int pipe_bpp;
+ enum intel_output_format output_format, sink_format;
+ const struct drm_display_info *info = &connector->base.display_info;
+
+ if (drm_mode_is_420_only(info, mode))
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ else
+ sink_format = INTEL_OUTPUT_FORMAT_RGB;
+
+ output_format = intel_dp_output_format(connector, mode, sink_format, true);
/*
* TBD pass the connector BPC,
* for now U8_MAX so that max BPC on that platform would be picked
*/
- int pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, U8_MAX);
+ pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, output_format, U8_MAX);
/*
* Output bpp is stored in 6.4 format so right shift by 4 to get the
@@ -1492,12 +1502,15 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp,
return -EINVAL;
}
-int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 max_req_bpc)
+int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp,
+ enum intel_output_format output_format,
+ u8 max_req_bpc)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
int i, num_bpc;
u8 dsc_bpc[3] = {0};
u8 dsc_max_bpc;
+ int pipe_bpp = 0;
/* Max DSC Input BPC for ICL is 10 and for TGL+ is 12 */
if (DISPLAY_VER(i915) >= 12)
@@ -1508,11 +1521,13 @@ int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 max_req_bpc)
num_bpc = drm_dp_dsc_sink_supported_input_bpcs(intel_dp->dsc_dpcd,
dsc_bpc);
for (i = 0; i < num_bpc; i++) {
- if (dsc_max_bpc >= dsc_bpc[i])
- return dsc_bpc[i] * 3;
+ if (dsc_max_bpc >= dsc_bpc[i]) {
+ pipe_bpp = dsc_bpc[i] * 3;
+ break;
+ }
}
- return 0;
+ return intel_dp_output_bpp(output_format, pipe_bpp);
}
static int intel_dp_source_dsc_version_minor(struct intel_dp *intel_dp)
@@ -1626,7 +1641,8 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
return -EINVAL;
if (compute_pipe_bpp)
- pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, conn_state->max_requested_bpc);
+ pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, pipe_config->output_format,
+ conn_state->max_requested_bpc);
else
pipe_bpp = pipe_config->pipe_bpp;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index ef39e4f7a329..2f4136e43f38 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -102,7 +102,9 @@ void intel_read_dp_sdp(struct intel_encoder *encoder,
struct intel_crtc_state *crtc_state,
unsigned int type);
bool intel_digital_port_connected(struct intel_encoder *encoder);
-int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp, u8 dsc_max_bpc);
+int intel_dp_dsc_compute_bpp(struct intel_dp *intel_dp,
+ enum intel_output_format output_format,
+ u8 dsc_max_bpc);
u16 intel_dp_dsc_get_output_bpp(struct drm_i915_private *i915,
u32 link_clock, u32 lane_count,
u32 mode_clock, u32 mode_hdisplay,
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index ff0b821a901a..bdc5c53ccd75 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -917,7 +917,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
* TBD pass the connector BPC,
* for now U8_MAX so that max BPC on that platform would be picked
*/
- int pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, U8_MAX);
+ int pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, INTEL_OUTPUT_FORMAT_RGB, U8_MAX);
if (drm_dp_sink_supports_fec(intel_dp->fec_capable)) {
dsc_max_output_bpp =
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 09/13] drm/i915/display: Add helper function to check if sink_format is 420
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (7 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 08/13] drm/i915/dp: Consider output_format while computing dsc bpp for mode_valid Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 10/13] drm/i915/dp: Avoid DSC with output_format YCBCR420 Ankit Nautiyal
` (5 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Add an inline helper function to check if the sink_format is set to
YCBCR420 format.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_types.h | 6 ++++++
drivers/gpu/drm/i915/display/intel_dp.c | 4 ++--
drivers/gpu/drm/i915/display/intel_hdmi.c | 6 +++---
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 1be15a1caa39..9bcccf02a2b1 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -2067,4 +2067,10 @@ to_intel_frontbuffer(struct drm_framebuffer *fb)
return fb ? to_intel_framebuffer(fb)->frontbuffer : NULL;
}
+static inline bool
+intel_crtc_has_420_sink_format(const struct intel_crtc_state *crtc_state)
+{
+ return crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420;
+}
+
#endif /* __INTEL_DISPLAY_TYPES_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 59919ad03a26..38ca6f676cb2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -2188,7 +2188,7 @@ intel_dp_compute_output_format(struct intel_encoder *encoder,
ret = intel_dp_compute_link_config(encoder, crtc_state, conn_state,
respect_downstream_limits, with_dsc);
if (ret) {
- if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
+ if (intel_crtc_has_420_sink_format(crtc_state) ||
!connector->base.ycbcr_420_allowed ||
!drm_mode_is_420_also(info, adjusted_mode))
return ret;
@@ -2903,7 +2903,7 @@ void intel_dp_configure_protocol_converter(struct intel_dp *intel_dp,
drm_dbg_kms(&i915->drm, "Failed to %s protocol converter HDMI mode\n",
str_enable_disable(intel_dp->has_hdmi_sink));
- if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420) {
+ if (intel_crtc_has_420_sink_format(crtc_state)) {
switch (crtc_state->output_format) {
case INTEL_OUTPUT_FORMAT_YCBCR420:
/*
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 15bf64a217c2..73e314f66367 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2048,7 +2048,7 @@ static bool hdmi_bpc_possible(const struct intel_crtc_state *crtc_state, int bpc
return false;
/* Display Wa_1405510057:icl,ehl */
- if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 &&
+ if (intel_crtc_has_420_sink_format(crtc_state) &&
bpc == 10 && DISPLAY_VER(dev_priv) == 11 &&
(adjusted_mode->crtc_hblank_end -
adjusted_mode->crtc_hblank_start) % 8 == 2)
@@ -2210,7 +2210,7 @@ static int intel_hdmi_compute_output_format(struct intel_encoder *encoder,
crtc_state->output_format = intel_hdmi_output_format(crtc_state, connector);
ret = intel_hdmi_compute_clock(encoder, crtc_state, respect_downstream_limits);
if (ret) {
- if (crtc_state->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
+ if (intel_crtc_has_420_sink_format(crtc_state) ||
!connector->base.ycbcr_420_allowed ||
!drm_mode_is_420_also(info, adjusted_mode))
return ret;
@@ -2295,7 +2295,7 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
return ret;
}
- if (pipe_config->sink_format == INTEL_OUTPUT_FORMAT_YCBCR420) {
+ if (intel_crtc_has_420_sink_format(pipe_config)) {
ret = intel_panel_fitting(pipe_config, conn_state);
if (ret)
return ret;
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 10/13] drm/i915/dp: Avoid DSC with output_format YCBCR420
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (8 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 09/13] drm/i915/display: Add helper function to check if sink_format is 420 Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 11/13] drm/i915/dp: Handle BPP where HDMI2.1 DFP doesn't support DSC Ankit Nautiyal
` (4 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Currently, DSC with YCBCR420 is not supported.
Return -EINVAL when trying with DSC with output_format as YCBCR420.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 38ca6f676cb2..2b4b6849397a 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1640,6 +1640,10 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
if (!intel_dp_supports_dsc(intel_dp, pipe_config))
return -EINVAL;
+ /* Currently DSC with YCBCR420 format is not supported */
+ if (pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR420)
+ return -EINVAL;
+
if (compute_pipe_bpp)
pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, pipe_config->output_format,
conn_state->max_requested_bpc);
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 11/13] drm/i915/dp: Handle BPP where HDMI2.1 DFP doesn't support DSC
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (9 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 10/13] drm/i915/dp: Avoid DSC with output_format YCBCR420 Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 12/13] drm/i915/dp: Fix FRL BW check for HDMI2.1 DFP Ankit Nautiyal
` (3 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Currently we use the highest input BPC supported by DP sink while using
DSC.In cases where PCON with HDMI2.1 as branch device, if PCON supports
DSC but HDMI2.1 sink does not supports DSC, The PCON tries to use same
input BPC that is used between Source and the PCON without DSC, which
might not work even with the maximum FRL rate supported by HDMI2.1
sink.
This patch calculates the max BPC that can be sufficient with either
RGB or YCBCR420 format for the maximum FRL rate supported.
v2: Rebase
v3: Use the sink_format in the functions instead of ycbcr420 flag.
v4: Rebase
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 61 +++++++++++++++++++++++--
1 file changed, 58 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 2b4b6849397a..6f2f3e02c35f 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -116,6 +116,7 @@ bool intel_dp_is_edp(struct intel_dp *intel_dp)
return dig_port->base.type == INTEL_OUTPUT_EDP;
}
+static bool intel_dp_is_hdmi_2_1_sink(struct intel_dp *intel_dp);
static void intel_dp_unset_edid(struct intel_dp *intel_dp);
/* Is link rate UHBR and thus 128b/132b? */
@@ -1620,6 +1621,39 @@ static int intel_dp_dsc_compute_params(struct intel_encoder *encoder,
return drm_dsc_compute_rc_parameters(vdsc_cfg);
}
+static int
+intel_dp_pcon_hdmi21_get_bpp_nodsc(struct intel_dp *intel_dp,
+ struct intel_crtc_state *pipe_config,
+ int max_bpc)
+{
+ struct intel_connector *intel_connector = intel_dp->attached_connector;
+ struct drm_connector *connector = &intel_connector->base;
+ const struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;
+ int i, num_bpc;
+ u8 dsc_bpc[3] = {0};
+ int req_rate_gbps;
+ int max_frl_rate = connector->display_info.hdmi.max_lanes *
+ connector->display_info.hdmi.max_frl_rate_per_lane;
+
+ num_bpc = drm_dp_dsc_sink_supported_input_bpcs(intel_dp->dsc_dpcd,
+ dsc_bpc);
+ for (i = 0; i < num_bpc; i++) {
+ if (dsc_bpc[i] > max_bpc)
+ continue;
+
+ req_rate_gbps = DIV_ROUND_UP(dsc_bpc[i] * 3 * adjusted_mode->clock, 1000000);
+
+ /* YCBCR420 reduces data rate by 2 */
+ if (intel_crtc_has_420_sink_format(pipe_config))
+ req_rate_gbps /= 2;
+
+ if (req_rate_gbps < max_frl_rate)
+ return dsc_bpc[i] * 3;
+ }
+
+ return 0;
+}
+
int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
struct intel_crtc_state *pipe_config,
struct drm_connector_state *conn_state,
@@ -1628,6 +1662,8 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
bool compute_pipe_bpp)
{
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct intel_connector *intel_connector = intel_dp->attached_connector;
+ struct drm_connector *connector = &intel_connector->base;
struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
const struct drm_display_mode *adjusted_mode =
&pipe_config->hw.adjusted_mode;
@@ -1644,12 +1680,31 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
if (pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR420)
return -EINVAL;
- if (compute_pipe_bpp)
+ /*
+ * In cases where PCON with HDMI2.1 as branch device, if PCON supports
+ * DSC but HDMI2.1 sink does not supports DSC, there can be issues due
+ * to the bpc used.
+ * With DSC, a source-PCON pair can support the mode with higher bpcs.
+ * But PCON->Sink pair, cannot support the same bpc without sink having
+ * DSC support.
+ * So use the max BPC as input BPC that will be sufficient to show the
+ * mode without DSC from PCON->HDMI2.1
+ */
+ if (intel_dp_is_hdmi_2_1_sink(intel_dp) &&
+ !connector->display_info.hdmi.dsc_cap.v_1p2) {
+ pipe_bpp = intel_dp_pcon_hdmi21_get_bpp_nodsc(intel_dp, pipe_config,
+ conn_state->max_requested_bpc);
+ if (!pipe_bpp) {
+ drm_dbg_kms(&dev_priv->drm,
+ "No BPC possible to support the mode without HDMI2.1 DSC\n");
+ return -EINVAL;
+ }
+ } else if (compute_pipe_bpp) {
pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, pipe_config->output_format,
conn_state->max_requested_bpc);
- else
+ } else {
pipe_bpp = pipe_config->pipe_bpp;
-
+ }
if (intel_dp->force_dsc_bpc) {
pipe_bpp = intel_dp->force_dsc_bpc * 3;
drm_dbg_kms(&dev_priv->drm, "Input DSC BPP forced to %d", pipe_bpp);
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 12/13] drm/i915/dp: Fix FRL BW check for HDMI2.1 DFP
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (10 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 11/13] drm/i915/dp: Handle BPP where HDMI2.1 DFP doesn't support DSC Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 13/13] drm/i915/dp: Add a wrapper to check frl/tmds downstream constraints Ankit Nautiyal
` (2 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
During FRL bandwidth check for downstream HDMI2.1 sink,
the min BPC supported is incorrectly taken for DP, and the check does
not consider ybcr420 only modes.
This patch fixes the bandwidth calculation similar to the TMDS case, by
taking min 8Bpc and considering Ycbcr420 only modes.
v2: Rebase
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 64 +++++++++++++++++--------
1 file changed, 45 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 6f2f3e02c35f..18a0a258f49f 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -118,6 +118,7 @@ bool intel_dp_is_edp(struct intel_dp *intel_dp)
static bool intel_dp_is_hdmi_2_1_sink(struct intel_dp *intel_dp);
static void intel_dp_unset_edid(struct intel_dp *intel_dp);
+static int intel_dp_hdmi_sink_max_frl(struct intel_dp *intel_dp);
/* Is link rate UHBR and thus 128b/132b? */
bool intel_dp_is_uhbr(const struct intel_crtc_state *crtc_state)
@@ -1029,6 +1030,32 @@ intel_dp_tmds_clock_valid(struct intel_dp *intel_dp,
return MODE_OK;
}
+static enum drm_mode_status
+intel_dp_frl_bw_valid(struct intel_dp *intel_dp, int target_clock,
+ int bpc, enum intel_output_format sink_format)
+{
+ int target_bw;
+ int max_frl_bw;
+ int bpp = bpc * 3;
+
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420)
+ target_clock /= 2;
+
+ target_bw = bpp * target_clock;
+
+ /* check for MAX FRL BW for both PCON and HDMI2.1 sink */
+ max_frl_bw = min(intel_dp->dfp.pcon_max_frl_bw,
+ intel_dp_hdmi_sink_max_frl(intel_dp));
+
+ /* converting bw from Gbps to Kbps*/
+ max_frl_bw = max_frl_bw * 1000000;
+
+ if (target_bw > max_frl_bw)
+ return MODE_CLOCK_HIGH;
+
+ return MODE_OK;
+}
+
static enum drm_mode_status
intel_dp_mode_valid_downstream(struct intel_connector *connector,
const struct drm_display_mode *mode,
@@ -1037,24 +1064,30 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
struct intel_dp *intel_dp = intel_attached_dp(connector);
const struct drm_display_info *info = &connector->base.display_info;
enum drm_mode_status status;
- bool ycbcr_420_only;
+ bool ycbcr_420_only = drm_mode_is_420_only(info, mode);
enum intel_output_format sink_format;
+ ycbcr_420_only = drm_mode_is_420_only(info, mode);
+
/* If PCON supports FRL MODE, check FRL bandwidth constraints */
if (intel_dp->dfp.pcon_max_frl_bw) {
- int target_bw;
- int max_frl_bw;
- int bpp = intel_dp_mode_min_output_bpp(connector, mode);
-
- target_bw = bpp * target_clock;
- max_frl_bw = intel_dp->dfp.pcon_max_frl_bw;
-
- /* converting bw from Gbps to Kbps*/
- max_frl_bw = max_frl_bw * 1000000;
+ if (ycbcr_420_only && connector->base.ycbcr_420_allowed)
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ else
+ sink_format = INTEL_OUTPUT_FORMAT_RGB;
- if (target_bw > max_frl_bw)
- return MODE_CLOCK_HIGH;
+ /* Assume 8bpc for the HDMI2.1 FRL BW check */
+ status = intel_dp_frl_bw_valid(intel_dp, target_clock, 8, sink_format);
+ if (status != MODE_OK) {
+ if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
+ !drm_mode_is_420_also(info, mode))
+ return status;
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ status = intel_dp_frl_bw_valid(intel_dp, target_clock, 8, sink_format);
+ if (status != MODE_OK)
+ return status;
+ }
return MODE_OK;
}
@@ -1063,13 +1096,6 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
target_clock > intel_dp->dfp.max_dotclock)
return MODE_CLOCK_HIGH;
- ycbcr_420_only = drm_mode_is_420_only(info, mode);
-
- if (ycbcr_420_only && connector->base.ycbcr_420_allowed)
- sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
- else
- sink_format = INTEL_OUTPUT_FORMAT_RGB;
-
/* Assume 8bpc for the DP++/HDMI/DVI TMDS clock check */
status = intel_dp_tmds_clock_valid(intel_dp, target_clock,
8, sink_format, true);
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] [PATCH v10 13/13] drm/i915/dp: Add a wrapper to check frl/tmds downstream constraints
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (11 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 12/13] drm/i915/dp: Fix FRL BW check for HDMI2.1 DFP Ankit Nautiyal
@ 2023-02-27 4:03 ` Ankit Nautiyal
2023-02-27 5:13 ` [Intel-gfx] ✓ Fi.CI.BAT: success for Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes (rev11) Patchwork
2023-02-27 7:04 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
14 siblings, 0 replies; 20+ messages in thread
From: Ankit Nautiyal @ 2023-02-27 4:03 UTC (permalink / raw)
To: intel-gfx
Add a wrapper function to check dp_downstream clock/bandwidth
constraints. Based on whether the sink supports FRL/TMDS the wrapper
calls the appropriate FRL/TMDS functions.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 51 +++++++++++--------------
1 file changed, 23 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 18a0a258f49f..50e7371cc196 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1056,6 +1056,18 @@ intel_dp_frl_bw_valid(struct intel_dp *intel_dp, int target_clock,
return MODE_OK;
}
+static enum drm_mode_status
+intel_dp_hdmi_bw_check(struct intel_dp *intel_dp,
+ int target_clock, int bpc,
+ enum intel_output_format sink_format,
+ bool is_frl)
+{
+ if (is_frl)
+ return intel_dp_frl_bw_valid(intel_dp, target_clock, 8, sink_format);
+
+ return intel_dp_tmds_clock_valid(intel_dp, target_clock, 8, sink_format, true);
+}
+
static enum drm_mode_status
intel_dp_mode_valid_downstream(struct intel_connector *connector,
const struct drm_display_mode *mode,
@@ -1065,48 +1077,31 @@ intel_dp_mode_valid_downstream(struct intel_connector *connector,
const struct drm_display_info *info = &connector->base.display_info;
enum drm_mode_status status;
bool ycbcr_420_only = drm_mode_is_420_only(info, mode);
+ bool is_frl;
enum intel_output_format sink_format;
+ int bpc = 8; /* Assume 8bpc for the DP++/HDMI/DVI TMDS/FRL bw heck */
- ycbcr_420_only = drm_mode_is_420_only(info, mode);
+ if (ycbcr_420_only && connector->base.ycbcr_420_allowed)
+ sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
+ else
+ sink_format = INTEL_OUTPUT_FORMAT_RGB;
/* If PCON supports FRL MODE, check FRL bandwidth constraints */
- if (intel_dp->dfp.pcon_max_frl_bw) {
-
- if (ycbcr_420_only && connector->base.ycbcr_420_allowed)
- sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
- else
- sink_format = INTEL_OUTPUT_FORMAT_RGB;
-
- /* Assume 8bpc for the HDMI2.1 FRL BW check */
- status = intel_dp_frl_bw_valid(intel_dp, target_clock, 8, sink_format);
- if (status != MODE_OK) {
- if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
- !drm_mode_is_420_also(info, mode))
- return status;
- sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
- status = intel_dp_frl_bw_valid(intel_dp, target_clock, 8, sink_format);
- if (status != MODE_OK)
- return status;
- }
+ is_frl = intel_dp->dfp.pcon_max_frl_bw ? true : false;
- return MODE_OK;
- }
-
- if (intel_dp->dfp.max_dotclock &&
+ if (!is_frl && intel_dp->dfp.max_dotclock &&
target_clock > intel_dp->dfp.max_dotclock)
return MODE_CLOCK_HIGH;
- /* Assume 8bpc for the DP++/HDMI/DVI TMDS clock check */
- status = intel_dp_tmds_clock_valid(intel_dp, target_clock,
- 8, sink_format, true);
+ status = intel_dp_hdmi_bw_check(intel_dp, target_clock, bpc, sink_format, is_frl);
if (status != MODE_OK) {
if (sink_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
!drm_mode_is_420_also(info, mode))
return status;
sink_format = INTEL_OUTPUT_FORMAT_YCBCR420;
- status = intel_dp_tmds_clock_valid(intel_dp, target_clock,
- 8, sink_format, true);
+ status = intel_dp_hdmi_bw_check(intel_dp, target_clock, bpc, sink_format, is_frl);
+ } else {
if (status != MODE_OK)
return status;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 20+ messages in thread* [Intel-gfx] ✓ Fi.CI.BAT: success for Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes (rev11)
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (12 preceding siblings ...)
2023-02-27 4:03 ` [Intel-gfx] [PATCH v10 13/13] drm/i915/dp: Add a wrapper to check frl/tmds downstream constraints Ankit Nautiyal
@ 2023-02-27 5:13 ` Patchwork
2023-02-27 7:04 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
14 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2023-02-27 5:13 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 7338 bytes --]
== Series Details ==
Series: Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes (rev11)
URL : https://patchwork.freedesktop.org/series/107550/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_12779 -> Patchwork_107550v11
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/index.html
Participating hosts (38 -> 37)
------------------------------
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_107550v11 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_lmem_swapping@random-engines:
- bat-adlp-6: NOTRUN -> [SKIP][1] ([i915#4613]) +3 similar issues
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-6/igt@gem_lmem_swapping@random-engines.html
* igt@i915_pm_rps@basic-api:
- bat-adlp-6: NOTRUN -> [SKIP][2] ([i915#6621])
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-6/igt@i915_pm_rps@basic-api.html
* igt@i915_selftest@live@hangcheck:
- fi-kbl-soraka: [PASS][3] -> [INCOMPLETE][4] ([i915#7913])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/fi-kbl-soraka/igt@i915_selftest@live@hangcheck.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/fi-kbl-soraka/igt@i915_selftest@live@hangcheck.html
* igt@i915_selftest@live@reset:
- bat-rpls-1: [PASS][5] -> [ABORT][6] ([i915#4983])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/bat-rpls-1/igt@i915_selftest@live@reset.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-rpls-1/igt@i915_selftest@live@reset.html
* igt@i915_selftest@live@slpc:
- bat-rpls-2: NOTRUN -> [DMESG-FAIL][7] ([i915#6997])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-rpls-2/igt@i915_selftest@live@slpc.html
* igt@kms_chamelium_hpd@common-hpd-after-suspend:
- bat-rpls-2: NOTRUN -> [SKIP][8] ([i915#7828])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-rpls-2/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
- bat-adlp-6: NOTRUN -> [SKIP][9] ([i915#7828])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-6/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
* igt@kms_pipe_crc_basic@read-crc:
- bat-adlp-9: NOTRUN -> [SKIP][10] ([i915#3546]) +1 similar issue
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-9/igt@kms_pipe_crc_basic@read-crc.html
* igt@kms_pipe_crc_basic@suspend-read-crc:
- bat-rpls-2: NOTRUN -> [SKIP][11] ([i915#1845])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-rpls-2/igt@kms_pipe_crc_basic@suspend-read-crc.html
* igt@prime_vgem@basic-fence-read:
- bat-adlp-6: NOTRUN -> [SKIP][12] ([fdo#109295] / [i915#3291] / [i915#3708]) +2 similar issues
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-6/igt@prime_vgem@basic-fence-read.html
* igt@prime_vgem@basic-userptr:
- bat-adlp-6: NOTRUN -> [SKIP][13] ([fdo#109295] / [i915#3301] / [i915#3708])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-6/igt@prime_vgem@basic-userptr.html
#### Possible fixes ####
* igt@gem_exec_gttfill@basic:
- fi-pnv-d510: [FAIL][14] ([i915#7229]) -> [PASS][15]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/fi-pnv-d510/igt@gem_exec_gttfill@basic.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/fi-pnv-d510/igt@gem_exec_gttfill@basic.html
* igt@i915_pm_rpm@basic-rte:
- bat-adlp-6: [ABORT][16] ([i915#7977]) -> [PASS][17]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/bat-adlp-6/igt@i915_pm_rpm@basic-rte.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-adlp-6/igt@i915_pm_rpm@basic-rte.html
* igt@i915_pm_rpm@module-reload:
- fi-bsw-n3050: [DMESG-WARN][18] ([i915#1982]) -> [PASS][19]
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/fi-bsw-n3050/igt@i915_pm_rpm@module-reload.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/fi-bsw-n3050/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live@reset:
- bat-rpls-2: [ABORT][20] ([i915#4983]) -> [PASS][21]
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/bat-rpls-2/igt@i915_selftest@live@reset.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/bat-rpls-2/igt@i915_selftest@live@reset.html
[fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
[i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
[i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
[i915#6997]: https://gitlab.freedesktop.org/drm/intel/issues/6997
[i915#7229]: https://gitlab.freedesktop.org/drm/intel/issues/7229
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
[i915#7977]: https://gitlab.freedesktop.org/drm/intel/issues/7977
Build changes
-------------
* Linux: CI_DRM_12779 -> Patchwork_107550v11
CI-20190529: 20190529
CI_DRM_12779: c9e864cbde25141a868d6bbbb5aa6f44186bbc7f @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7173: deab4e0bdf5a9366b67d0a44f478f3da3c9a943b @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_107550v11: c9e864cbde25141a868d6bbbb5aa6f44186bbc7f @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
a31166c78353 drm/i915/dp: Add a wrapper to check frl/tmds downstream constraints
91b420988505 drm/i915/dp: Fix FRL BW check for HDMI2.1 DFP
f56ad250387f drm/i915/dp: Handle BPP where HDMI2.1 DFP doesn't support DSC
bfc39c7e8271 drm/i915/dp: Avoid DSC with output_format YCBCR420
2584aec58575 drm/i915/display: Add helper function to check if sink_format is 420
28527498fce4 drm/i915/dp: Consider output_format while computing dsc bpp for mode_valid
b05d66c3efc2 drm/i915/dp: Rearrange check for illegal mode and comments in mode_valid
a940d522a0ca drm/i915/display: Use sink_format instead of ycbcr420_output flag
98b44c6e82cf drm/i915/dp: Compute output format with/without DSC
e94c2ccbe5f6 drm/i915/dp: Replace intel_dp.dfp members with the new crtc_state sink_format
7cf917181f60 drm/i915/dp: Add Scaler constraint for YCbCr420 output
3afaa71c5c1a drm/i915/display: Add new member in intel_dp to store ycbcr420 passthrough cap
d32be0b94951 drm/i915/display: Add new member to configure PCON color conversion
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/index.html
[-- Attachment #2: Type: text/html, Size: 8646 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread* [Intel-gfx] ✓ Fi.CI.IGT: success for Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes (rev11)
2023-02-27 4:03 [Intel-gfx] [PATCH v10 00/13] Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes Ankit Nautiyal
` (13 preceding siblings ...)
2023-02-27 5:13 ` [Intel-gfx] ✓ Fi.CI.BAT: success for Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes (rev11) Patchwork
@ 2023-02-27 7:04 ` Patchwork
14 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2023-02-27 7:04 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 28202 bytes --]
== Series Details ==
Series: Handle BPC for HDMI2.1 PCON without DSC1.2 sink and other fixes (rev11)
URL : https://patchwork.freedesktop.org/series/107550/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_12779_full -> Patchwork_107550v11_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (10 -> 10)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_107550v11_full:
### IGT changes ###
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@syncobj_timeline@invalid-multi-wait-available-unsubmitted-submitted-signaled:
- {shard-dg1}: NOTRUN -> [DMESG-WARN][1]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-dg1-16/igt@syncobj_timeline@invalid-multi-wait-available-unsubmitted-submitted-signaled.html
Known issues
------------
Here are the changes found in Patchwork_107550v11_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_fair@basic-none-solo@rcs0:
- shard-tglu-10: NOTRUN -> [FAIL][2] ([i915#2842])
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@gem_exec_fair@basic-none-solo@rcs0.html
* igt@gem_lmem_swapping@verify-ccs:
- shard-tglu-10: NOTRUN -> [SKIP][3] ([i915#4613]) +1 similar issue
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@gem_lmem_swapping@verify-ccs.html
* igt@i915_pm_dc@dc6-dpms:
- shard-tglu-10: NOTRUN -> [FAIL][4] ([i915#3989] / [i915#454])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@i915_pm_dc@dc6-dpms.html
* igt@i915_query@hwconfig_table:
- shard-tglu-10: NOTRUN -> [SKIP][5] ([i915#6245])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@i915_query@hwconfig_table.html
* igt@kms_big_fb@4-tiled-16bpp-rotate-90:
- shard-tglu-10: NOTRUN -> [SKIP][6] ([i915#5286])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@4-tiled-32bpp-rotate-90:
- shard-apl: NOTRUN -> [SKIP][7] ([fdo#109271]) +31 similar issues
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-apl3/igt@kms_big_fb@4-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-64bpp-rotate-90:
- shard-tglu-10: NOTRUN -> [SKIP][8] ([fdo#111614]) +1 similar issue
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-8bpp-rotate-180:
- shard-tglu-10: NOTRUN -> [SKIP][9] ([fdo#111615]) +1 similar issue
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_big_fb@yf-tiled-8bpp-rotate-180.html
* igt@kms_ccs@pipe-a-crc-primary-basic-4_tiled_dg2_rc_ccs:
- shard-tglu-10: NOTRUN -> [SKIP][10] ([i915#3689] / [i915#6095]) +1 similar issue
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_ccs@pipe-a-crc-primary-basic-4_tiled_dg2_rc_ccs.html
* igt@kms_ccs@pipe-a-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs:
- shard-tglu-10: NOTRUN -> [SKIP][11] ([i915#3689] / [i915#3886]) +1 similar issue
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_ccs@pipe-a-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_ccs:
- shard-tglu-10: NOTRUN -> [SKIP][12] ([i915#3689]) +1 similar issue
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_ccs@pipe-b-bad-rotation-90-y_tiled_ccs.html
* igt@kms_ccs@pipe-c-crc-primary-basic-y_tiled_gen12_rc_ccs_cc:
- shard-apl: NOTRUN -> [SKIP][13] ([fdo#109271] / [i915#3886])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-apl3/igt@kms_ccs@pipe-c-crc-primary-basic-y_tiled_gen12_rc_ccs_cc.html
- shard-glk: NOTRUN -> [SKIP][14] ([fdo#109271] / [i915#3886])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk6/igt@kms_ccs@pipe-c-crc-primary-basic-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-random-ccs-data-4_tiled_dg2_mc_ccs:
- shard-tglu-10: NOTRUN -> [SKIP][15] ([i915#6095]) +2 similar issues
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_ccs@pipe-c-random-ccs-data-4_tiled_dg2_mc_ccs.html
* igt@kms_chamelium_color@ctm-0-25:
- shard-tglu-10: NOTRUN -> [SKIP][16] ([fdo#111827])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_chamelium_color@ctm-0-25.html
* igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k:
- shard-tglu-10: NOTRUN -> [SKIP][17] ([i915#7828]) +2 similar issues
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k.html
* igt@kms_color@ctm-green-to-red@pipe-a-vga-1:
- shard-snb: NOTRUN -> [SKIP][18] ([fdo#109271]) +8 similar issues
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-snb7/igt@kms_color@ctm-green-to-red@pipe-a-vga-1.html
* igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
- shard-tglu-10: NOTRUN -> [SKIP][19] ([fdo#109274])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-glk: [PASS][20] -> [FAIL][21] ([i915#2346])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-glk7/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk9/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
* igt@kms_flip@2x-absolute-wf_vblank:
- shard-tglu-10: NOTRUN -> [SKIP][22] ([fdo#109274] / [i915#3637] / [i915#3966])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_flip@2x-absolute-wf_vblank.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
- shard-tglu-10: NOTRUN -> [SKIP][23] ([i915#2587] / [i915#2672])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-cpu:
- shard-tglu-10: NOTRUN -> [SKIP][24] ([fdo#109280]) +8 similar issues
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-glk: NOTRUN -> [SKIP][25] ([fdo#109271]) +19 similar issues
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-suspend:
- shard-tglu-10: NOTRUN -> [SKIP][26] ([fdo#110189]) +8 similar issues
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
* igt@kms_prime@basic-modeset-hybrid:
- shard-tglu-10: NOTRUN -> [SKIP][27] ([i915#6524])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_prime@basic-modeset-hybrid.html
* igt@kms_psr2_sf@plane-move-sf-dmg-area:
- shard-tglu-10: NOTRUN -> [SKIP][28] ([fdo#111068] / [i915#658])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_psr2_sf@plane-move-sf-dmg-area.html
* igt@kms_setmode@basic@pipe-a-vga-1:
- shard-snb: NOTRUN -> [FAIL][29] ([i915#5465]) +1 similar issue
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-snb7/igt@kms_setmode@basic@pipe-a-vga-1.html
* igt@kms_vrr@flip-suspend:
- shard-tglu-10: NOTRUN -> [SKIP][30] ([i915#3555]) +3 similar issues
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@kms_vrr@flip-suspend.html
* igt@perf@mi-rpc:
- shard-tglu-10: NOTRUN -> [SKIP][31] ([fdo#109289])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@perf@mi-rpc.html
* igt@perf@stress-open-close:
- shard-glk: NOTRUN -> [ABORT][32] ([i915#5213])
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk6/igt@perf@stress-open-close.html
* igt@prime_udl:
- shard-tglu-10: NOTRUN -> [SKIP][33] ([fdo#109291])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@prime_udl.html
* igt@vc4/vc4_wait_bo@bad-bo:
- shard-tglu-10: NOTRUN -> [SKIP][34] ([i915#2575]) +1 similar issue
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@vc4/vc4_wait_bo@bad-bo.html
#### Possible fixes ####
* igt@drm_fdinfo@idle@rcs0:
- {shard-rkl}: [FAIL][35] ([i915#7742]) -> [PASS][36] +1 similar issue
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@drm_fdinfo@idle@rcs0.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-2/igt@drm_fdinfo@idle@rcs0.html
* igt@fbdev@unaligned-write:
- {shard-rkl}: [SKIP][37] ([i915#2582]) -> [PASS][38]
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@fbdev@unaligned-write.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-6/igt@fbdev@unaligned-write.html
* igt@gem_eio@in-flight-suspend:
- {shard-rkl}: [FAIL][39] ([fdo#103375]) -> [PASS][40] +1 similar issue
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-3/igt@gem_eio@in-flight-suspend.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-2/igt@gem_eio@in-flight-suspend.html
* igt@gem_exec_fair@basic-none@vcs0:
- {shard-rkl}: [FAIL][41] ([i915#2842]) -> [PASS][42] +2 similar issues
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-3/igt@gem_exec_fair@basic-none@vcs0.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-5/igt@gem_exec_fair@basic-none@vcs0.html
* igt@gem_exec_flush@basic-batch-kernel-default-cmd:
- {shard-rkl}: [SKIP][43] ([fdo#109313]) -> [PASS][44]
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-3/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-5/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html
* igt@gem_exec_reloc@basic-write-read-active:
- {shard-rkl}: [SKIP][45] ([i915#3281]) -> [PASS][46] +1 similar issue
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-2/igt@gem_exec_reloc@basic-write-read-active.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-5/igt@gem_exec_reloc@basic-write-read-active.html
* igt@gem_partial_pwrite_pread@write:
- {shard-rkl}: [SKIP][47] ([i915#3282]) -> [PASS][48] +1 similar issue
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-2/igt@gem_partial_pwrite_pread@write.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-5/igt@gem_partial_pwrite_pread@write.html
* igt@gen9_exec_parse@allowed-single:
- shard-apl: [ABORT][49] ([i915#5566]) -> [PASS][50]
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-apl1/igt@gen9_exec_parse@allowed-single.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-apl3/igt@gen9_exec_parse@allowed-single.html
- shard-glk: [ABORT][51] ([i915#5566]) -> [PASS][52]
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-glk5/igt@gen9_exec_parse@allowed-single.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk6/igt@gen9_exec_parse@allowed-single.html
* igt@gen9_exec_parse@basic-rejected:
- {shard-rkl}: [SKIP][53] ([i915#2527]) -> [PASS][54]
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-3/igt@gen9_exec_parse@basic-rejected.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-5/igt@gen9_exec_parse@basic-rejected.html
* igt@i915_pm_rc6_residency@rc6-idle@vecs0:
- {shard-dg1}: [FAIL][55] ([i915#3591]) -> [PASS][56]
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-dg1-18/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
* igt@kms_ccs@pipe-b-bad-pixel-format-y_tiled_gen12_rc_ccs_cc:
- {shard-rkl}: [SKIP][57] ([i915#1845] / [i915#4098]) -> [PASS][58] +22 similar issues
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@kms_ccs@pipe-b-bad-pixel-format-y_tiled_gen12_rc_ccs_cc.html
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-6/igt@kms_ccs@pipe-b-bad-pixel-format-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-apl: [FAIL][59] ([i915#2346]) -> [PASS][60]
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-apl3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-apl6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a1-hdmi-a2:
- shard-glk: [FAIL][61] ([i915#79]) -> [PASS][62]
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-glk7/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a1-hdmi-a2.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk9/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a1-hdmi-a2.html
* igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@ac-hdmi-a1-hdmi-a2:
- shard-glk: [FAIL][63] ([i915#2122]) -> [PASS][64] +1 similar issue
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-glk7/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@ac-hdmi-a1-hdmi-a2.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-glk9/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@ac-hdmi-a1-hdmi-a2.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc:
- {shard-rkl}: [SKIP][65] ([i915#1849] / [i915#4098]) -> [PASS][66] +13 similar issues
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc.html
* igt@kms_plane@plane-panning-top-left@pipe-a-planes:
- {shard-rkl}: [SKIP][67] ([i915#1849]) -> [PASS][68] +2 similar issues
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@kms_plane@plane-panning-top-left@pipe-a-planes.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-6/igt@kms_plane@plane-panning-top-left@pipe-a-planes.html
* igt@kms_psr@sprite_mmap_cpu:
- {shard-rkl}: [SKIP][69] ([i915#1072]) -> [PASS][70]
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@kms_psr@sprite_mmap_cpu.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-6/igt@kms_psr@sprite_mmap_cpu.html
* igt@perf@polling-small-buf:
- {shard-rkl}: [FAIL][71] ([i915#1722]) -> [PASS][72]
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-1/igt@perf@polling-small-buf.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-6/igt@perf@polling-small-buf.html
* igt@perf_pmu@idle@rcs0:
- {shard-rkl}: [FAIL][73] ([i915#4349]) -> [PASS][74]
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-rkl-4/igt@perf_pmu@idle@rcs0.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-rkl-3/igt@perf_pmu@idle@rcs0.html
#### Warnings ####
* igt@i915_pm_rc6_residency@rc6-idle@bcs0:
- shard-tglu-10: [FAIL][75] ([i915#2681] / [i915#3591]) -> [WARN][76] ([i915#2681])
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12779/shard-tglu-10/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/shard-tglu-10/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
[fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
[fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
[fdo#109313]: https://bugs.freedesktop.org/show_bug.cgi?id=109313
[fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
[fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
[fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
[fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
[fdo#110542]: https://bugs.freedesktop.org/show_bug.cgi?id=110542
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
[fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
[fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
[fdo#111644]: https://bugs.freedesktop.org/show_bug.cgi?id=111644
[fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[fdo#112054]: https://bugs.freedesktop.org/show_bug.cgi?id=112054
[fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
[i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
[i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
[i915#1755]: https://gitlab.freedesktop.org/drm/intel/issues/1755
[i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
[i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
[i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
[i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
[i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
[i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
[i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
[i915#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
[i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
[i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
[i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
[i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
[i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
[i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
[i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
[i915#315]: https://gitlab.freedesktop.org/drm/intel/issues/315
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
[i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3528]: https://gitlab.freedesktop.org/drm/intel/issues/3528
[i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3558]: https://gitlab.freedesktop.org/drm/intel/issues/3558
[i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
[i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
[i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
[i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
[i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
[i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
[i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
[i915#3966]: https://gitlab.freedesktop.org/drm/intel/issues/3966
[i915#3989]: https://gitlab.freedesktop.org/drm/intel/issues/3989
[i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4387]: https://gitlab.freedesktop.org/drm/intel/issues/4387
[i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
[i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
[i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
[i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
[i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
[i915#4859]: https://gitlab.freedesktop.org/drm/intel/issues/4859
[i915#4936]: https://gitlab.freedesktop.org/drm/intel/issues/4936
[i915#5030]: https://gitlab.freedesktop.org/drm/intel/issues/5030
[i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
[i915#5213]: https://gitlab.freedesktop.org/drm/intel/issues/5213
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
[i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
[i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
[i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
[i915#5431]: https://gitlab.freedesktop.org/drm/intel/issues/5431
[i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
[i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
[i915#5465]: https://gitlab.freedesktop.org/drm/intel/issues/5465
[i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
[i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6245]: https://gitlab.freedesktop.org/drm/intel/issues/6245
[i915#6247]: https://gitlab.freedesktop.org/drm/intel/issues/6247
[i915#6248]: https://gitlab.freedesktop.org/drm/intel/issues/6248
[i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
[i915#6333]: https://gitlab.freedesktop.org/drm/intel/issues/6333
[i915#6344]: https://gitlab.freedesktop.org/drm/intel/issues/6344
[i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
[i915#6497]: https://gitlab.freedesktop.org/drm/intel/issues/6497
[i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
[i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
[i915#6590]: https://gitlab.freedesktop.org/drm/intel/issues/6590
[i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
[i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
[i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
[i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
[i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
[i915#7128]: https://gitlab.freedesktop.org/drm/intel/issues/7128
[i915#7276]: https://gitlab.freedesktop.org/drm/intel/issues/7276
[i915#7294]: https://gitlab.freedesktop.org/drm/intel/issues/7294
[i915#7456]: https://gitlab.freedesktop.org/drm/intel/issues/7456
[i915#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
[i915#7651]: https://gitlab.freedesktop.org/drm/intel/issues/7651
[i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
[i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
[i915#7707]: https://gitlab.freedesktop.org/drm/intel/issues/7707
[i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
[i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
[i915#7949]: https://gitlab.freedesktop.org/drm/intel/issues/7949
[i915#7957]: https://gitlab.freedesktop.org/drm/intel/issues/7957
[i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
[i915#8152]: https://gitlab.freedesktop.org/drm/intel/issues/8152
[i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
Build changes
-------------
* Linux: CI_DRM_12779 -> Patchwork_107550v11
CI-20190529: 20190529
CI_DRM_12779: c9e864cbde25141a868d6bbbb5aa6f44186bbc7f @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7173: deab4e0bdf5a9366b67d0a44f478f3da3c9a943b @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_107550v11: c9e864cbde25141a868d6bbbb5aa6f44186bbc7f @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_107550v11/index.html
[-- Attachment #2: Type: text/html, Size: 24550 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread