* [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over
@ 2022-12-16 16:00 Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 01/12] drm/edid: store quirks in display info Jani Nikula
` (14 more replies)
0 siblings, 15 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
The drm_edid handling still needed some plumbing in drm_edid.c before we
could convert i915 over to use it. Specifically
drm_edid_connector_update() needed to be split to two, with separate
drm_edid_connector_add_modes(). This is better explained in patch 7
commit message.
With that in patches 1-8 along with some refactorings, we can finally
switch i915 over to use drm_edid. And with that, i915 starts supporting
the HF-EEODB extension.
I've dropped Ville's earlier R-b from some of the patches because
they've changed so much over the rebases and changes.
BR,
Jani.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Jani Nikula (12):
drm/edid: store quirks in display info
drm/edid: stop passing quirks around
drm/edid: rename struct drm_display_info *display to *info
drm/edid: merge ELD handling to update_display_info()
drm/edid: move EDID BPC quirk application to update_display_info()
drm/edid: refactor _drm_edid_connector_update() and rename
drm/edid: add separate drm_edid_connector_add_modes()
drm/edid: remove redundant _drm_connector_update_edid_property()
drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
drm/i915/bios: convert intel_bios_init_panel() to drm_edid
drm/i915/opregion: convert intel_opregion_get_edid() to struct
drm_edid
drm/i915/panel: move panel fixed EDID to struct intel_panel
drivers/gpu/drm/drm_edid.c | 187 +++++++++---------
drivers/gpu/drm/drm_probe_helper.c | 4 +-
drivers/gpu/drm/i915/display/icl_dsi.c | 2 +-
drivers/gpu/drm/i915/display/intel_bios.c | 23 +--
drivers/gpu/drm/i915/display/intel_bios.h | 4 +-
.../gpu/drm/i915/display/intel_connector.c | 5 +-
.../drm/i915/display/intel_display_types.h | 8 +-
drivers/gpu/drm/i915/display/intel_dp.c | 91 +++++----
drivers/gpu/drm/i915/display/intel_dvo.c | 2 +-
drivers/gpu/drm/i915/display/intel_hdmi.c | 28 +--
drivers/gpu/drm/i915/display/intel_lvds.c | 51 +++--
drivers/gpu/drm/i915/display/intel_opregion.c | 29 ++-
drivers/gpu/drm/i915/display/intel_opregion.h | 4 +-
drivers/gpu/drm/i915/display/intel_panel.c | 10 +-
drivers/gpu/drm/i915/display/intel_panel.h | 4 +-
drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +-
drivers/gpu/drm/i915/display/vlv_dsi.c | 2 +-
include/drm/drm_connector.h | 5 +
include/drm/drm_edid.h | 2 +
19 files changed, 246 insertions(+), 217 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 01/12] drm/edid: store quirks in display info
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 02/12] drm/edid: stop passing quirks around Jani Nikula
` (13 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Although the quirks are internal to EDID parsing, it'll be helpful to
store them in display info to avoid having to pass them around.
This will also help separate adding probed modes (which needs the
quirks) from updating display info.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 41 ++++++++++++++++++-------------------
include/drm/drm_connector.h | 5 +++++
2 files changed, 25 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 3841aba17abd..1df337b207f2 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6374,18 +6374,19 @@ static void drm_reset_display_info(struct drm_connector *connector)
info->mso_stream_count = 0;
info->mso_pixel_overlap = 0;
info->max_dsc_bpp = 0;
+ info->quirks = 0;
}
-static u32 update_display_info(struct drm_connector *connector,
- const struct drm_edid *drm_edid)
+static void update_display_info(struct drm_connector *connector,
+ const struct drm_edid *drm_edid)
{
struct drm_display_info *info = &connector->display_info;
const struct edid *edid = drm_edid->edid;
- u32 quirks = edid_get_quirks(drm_edid);
-
drm_reset_display_info(connector);
+ info->quirks = edid_get_quirks(drm_edid);
+
info->width_mm = edid->width_cm * 10;
info->height_mm = edid->height_cm * 10;
@@ -6456,17 +6457,15 @@ static u32 update_display_info(struct drm_connector *connector,
drm_update_mso(connector, drm_edid);
out:
- if (quirks & EDID_QUIRK_NON_DESKTOP) {
+ if (info->quirks & EDID_QUIRK_NON_DESKTOP) {
drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Non-desktop display%s\n",
connector->base.id, connector->name,
info->non_desktop ? " (redundant quirk)" : "");
info->non_desktop = true;
}
- if (quirks & EDID_QUIRK_CAP_DSC_15BPP)
+ if (info->quirks & EDID_QUIRK_CAP_DSC_15BPP)
info->max_dsc_bpp = 15;
-
- return quirks;
}
static struct drm_display_mode *drm_mode_displayid_detailed(struct drm_device *dev,
@@ -6564,8 +6563,8 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
static int _drm_edid_connector_update(struct drm_connector *connector,
const struct drm_edid *drm_edid)
{
+ struct drm_display_info *info = &connector->display_info;
int num_modes = 0;
- u32 quirks;
if (!drm_edid) {
drm_reset_display_info(connector);
@@ -6578,7 +6577,7 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
* To avoid multiple parsing of same block, lets parse that map
* from sink info, before parsing CEA modes.
*/
- quirks = update_display_info(connector, drm_edid);
+ update_display_info(connector, drm_edid);
/* Depends on info->cea_rev set by update_display_info() above */
drm_edid_to_eld(connector, drm_edid);
@@ -6597,7 +6596,7 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
*
* XXX order for additional mode types in extension blocks?
*/
- num_modes += add_detailed_modes(connector, drm_edid, quirks);
+ num_modes += add_detailed_modes(connector, drm_edid, info->quirks);
num_modes += add_cvt_modes(connector, drm_edid);
num_modes += add_standard_modes(connector, drm_edid);
num_modes += add_established_modes(connector, drm_edid);
@@ -6607,20 +6606,20 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
if (drm_edid->edid->features & DRM_EDID_FEATURE_CONTINUOUS_FREQ)
num_modes += add_inferred_modes(connector, drm_edid);
- if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
- edid_fixup_preferred(connector, quirks);
+ if (info->quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
+ edid_fixup_preferred(connector, info->quirks);
- if (quirks & EDID_QUIRK_FORCE_6BPC)
- connector->display_info.bpc = 6;
+ if (info->quirks & EDID_QUIRK_FORCE_6BPC)
+ info->bpc = 6;
- if (quirks & EDID_QUIRK_FORCE_8BPC)
- connector->display_info.bpc = 8;
+ if (info->quirks & EDID_QUIRK_FORCE_8BPC)
+ info->bpc = 8;
- if (quirks & EDID_QUIRK_FORCE_10BPC)
- connector->display_info.bpc = 10;
+ if (info->quirks & EDID_QUIRK_FORCE_10BPC)
+ info->bpc = 10;
- if (quirks & EDID_QUIRK_FORCE_12BPC)
- connector->display_info.bpc = 12;
+ if (info->quirks & EDID_QUIRK_FORCE_12BPC)
+ info->bpc = 12;
return num_modes;
}
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 9037f1317aee..35e659d1851a 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -721,6 +721,11 @@ struct drm_display_info {
* monitor's default value is used instead.
*/
u32 max_dsc_bpp;
+
+ /**
+ * @quirks: EDID based quirks. Internal to EDID parsing.
+ */
+ u32 quirks;
};
int drm_display_info_set_bus_formats(struct drm_display_info *info,
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 02/12] drm/edid: stop passing quirks around
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 01/12] drm/edid: store quirks in display info Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 03/12] drm/edid: rename struct drm_display_info *display to *info Jani Nikula
` (12 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Now that quirks are stored in display info, we can just look them up
using the connector instead of having to pass them around.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 34 +++++++++++++++-------------------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 1df337b207f2..d3ce559e0dfa 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -96,7 +96,6 @@ struct detailed_mode_closure {
struct drm_connector *connector;
const struct drm_edid *drm_edid;
bool preferred;
- u32 quirks;
int modes;
};
@@ -2887,9 +2886,9 @@ static u32 edid_get_quirks(const struct drm_edid *drm_edid)
* Walk the mode list for connector, clearing the preferred status on existing
* modes and setting it anew for the right mode ala quirks.
*/
-static void edid_fixup_preferred(struct drm_connector *connector,
- u32 quirks)
+static void edid_fixup_preferred(struct drm_connector *connector)
{
+ const struct drm_display_info *info = &connector->display_info;
struct drm_display_mode *t, *cur_mode, *preferred_mode;
int target_refresh = 0;
int cur_vrefresh, preferred_vrefresh;
@@ -2897,9 +2896,9 @@ static void edid_fixup_preferred(struct drm_connector *connector,
if (list_empty(&connector->probed_modes))
return;
- if (quirks & EDID_QUIRK_PREFER_LARGE_60)
+ if (info->quirks & EDID_QUIRK_PREFER_LARGE_60)
target_refresh = 60;
- if (quirks & EDID_QUIRK_PREFER_LARGE_75)
+ if (info->quirks & EDID_QUIRK_PREFER_LARGE_75)
target_refresh = 75;
preferred_mode = list_first_entry(&connector->probed_modes,
@@ -3401,9 +3400,9 @@ drm_mode_do_interlace_quirk(struct drm_display_mode *mode,
*/
static struct drm_display_mode *drm_mode_detailed(struct drm_connector *connector,
const struct drm_edid *drm_edid,
- const struct detailed_timing *timing,
- u32 quirks)
+ const struct detailed_timing *timing)
{
+ const struct drm_display_info *info = &connector->display_info;
struct drm_device *dev = connector->dev;
struct drm_display_mode *mode;
const struct detailed_pixel_timing *pt = &timing->data.pixel_data;
@@ -3437,7 +3436,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_connector *connecto
return NULL;
}
- if (quirks & EDID_QUIRK_FORCE_REDUCED_BLANKING) {
+ if (info->quirks & EDID_QUIRK_FORCE_REDUCED_BLANKING) {
mode = drm_cvt_mode(dev, hactive, vactive, 60, true, false, false);
if (!mode)
return NULL;
@@ -3449,7 +3448,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_connector *connecto
if (!mode)
return NULL;
- if (quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH)
+ if (info->quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH)
mode->clock = 1088 * 10;
else
mode->clock = le16_to_cpu(timing->pixel_clock) * 10;
@@ -3472,7 +3471,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_connector *connecto
drm_mode_do_interlace_quirk(mode, pt);
- if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
+ if (info->quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
mode->flags |= DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC;
} else {
mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
@@ -3485,12 +3484,12 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_connector *connecto
mode->width_mm = pt->width_mm_lo | (pt->width_height_mm_hi & 0xf0) << 4;
mode->height_mm = pt->height_mm_lo | (pt->width_height_mm_hi & 0xf) << 8;
- if (quirks & EDID_QUIRK_DETAILED_IN_CM) {
+ if (info->quirks & EDID_QUIRK_DETAILED_IN_CM) {
mode->width_mm *= 10;
mode->height_mm *= 10;
}
- if (quirks & EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
+ if (info->quirks & EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
mode->width_mm = drm_edid->edid->width_cm * 10;
mode->height_mm = drm_edid->edid->height_cm * 10;
}
@@ -4003,8 +4002,7 @@ do_detailed_mode(const struct detailed_timing *timing, void *c)
return;
newmode = drm_mode_detailed(closure->connector,
- closure->drm_edid, timing,
- closure->quirks);
+ closure->drm_edid, timing);
if (!newmode)
return;
@@ -4027,15 +4025,13 @@ do_detailed_mode(const struct detailed_timing *timing, void *c)
* add_detailed_modes - Add modes from detailed timings
* @connector: attached connector
* @drm_edid: EDID block to scan
- * @quirks: quirks to apply
*/
static int add_detailed_modes(struct drm_connector *connector,
- const struct drm_edid *drm_edid, u32 quirks)
+ const struct drm_edid *drm_edid)
{
struct detailed_mode_closure closure = {
.connector = connector,
.drm_edid = drm_edid,
- .quirks = quirks,
};
if (drm_edid->edid->revision >= 4)
@@ -6596,7 +6592,7 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
*
* XXX order for additional mode types in extension blocks?
*/
- num_modes += add_detailed_modes(connector, drm_edid, info->quirks);
+ num_modes += add_detailed_modes(connector, drm_edid);
num_modes += add_cvt_modes(connector, drm_edid);
num_modes += add_standard_modes(connector, drm_edid);
num_modes += add_established_modes(connector, drm_edid);
@@ -6607,7 +6603,7 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
num_modes += add_inferred_modes(connector, drm_edid);
if (info->quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
- edid_fixup_preferred(connector, info->quirks);
+ edid_fixup_preferred(connector);
if (info->quirks & EDID_QUIRK_FORCE_6BPC)
info->bpc = 6;
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 03/12] drm/edid: rename struct drm_display_info *display to *info
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 01/12] drm/edid: store quirks in display info Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 02/12] drm/edid: stop passing quirks around Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 04/12] drm/edid: merge ELD handling to update_display_info() Jani Nikula
` (11 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Rename the local variable to info for consistency.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index d3ce559e0dfa..f40058d4c290 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -5991,14 +5991,14 @@ static void drm_parse_dsc_info(struct drm_hdmi_dsc_cap *hdmi_dsc,
static void drm_parse_hdmi_forum_scds(struct drm_connector *connector,
const u8 *hf_scds)
{
- struct drm_display_info *display = &connector->display_info;
- struct drm_hdmi_info *hdmi = &display->hdmi;
+ struct drm_display_info *info = &connector->display_info;
+ struct drm_hdmi_info *hdmi = &info->hdmi;
struct drm_hdmi_dsc_cap *hdmi_dsc = &hdmi->dsc_cap;
int max_tmds_clock = 0;
u8 max_frl_rate = 0;
bool dsc_support = false;
- display->has_hdmi_infoframe = true;
+ info->has_hdmi_infoframe = true;
if (hf_scds[6] & 0x80) {
hdmi->scdc.supported = true;
@@ -6022,7 +6022,7 @@ static void drm_parse_hdmi_forum_scds(struct drm_connector *connector,
max_tmds_clock = hf_scds[5] * 5000;
if (max_tmds_clock > 340000) {
- display->max_tmds_clock = max_tmds_clock;
+ info->max_tmds_clock = max_tmds_clock;
}
if (scdc->supported) {
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 04/12] drm/edid: merge ELD handling to update_display_info()
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (2 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 03/12] drm/edid: rename struct drm_display_info *display to *info Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 05/12] drm/edid: move EDID BPC quirk application " Jani Nikula
` (10 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Simplify display info update by merging ELD handling as well as clearing
of the data in update_display_info().
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 28 +++++++++++++---------------
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index f40058d4c290..2246a5b10d2c 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -5529,8 +5529,6 @@ static void drm_edid_to_eld(struct drm_connector *connector,
int total_sad_count = 0;
int mnl;
- clear_eld(connector);
-
if (!drm_edid)
return;
@@ -6377,9 +6375,15 @@ static void update_display_info(struct drm_connector *connector,
const struct drm_edid *drm_edid)
{
struct drm_display_info *info = &connector->display_info;
- const struct edid *edid = drm_edid->edid;
+ const struct edid *edid;
drm_reset_display_info(connector);
+ clear_eld(connector);
+
+ if (!drm_edid)
+ return;
+
+ edid = drm_edid->edid;
info->quirks = edid_get_quirks(drm_edid);
@@ -6462,6 +6466,9 @@ static void update_display_info(struct drm_connector *connector,
if (info->quirks & EDID_QUIRK_CAP_DSC_15BPP)
info->max_dsc_bpp = 15;
+
+ /* Depends on info->cea_rev set by drm_parse_cea_ext() above */
+ drm_edid_to_eld(connector, drm_edid);
}
static struct drm_display_mode *drm_mode_displayid_detailed(struct drm_device *dev,
@@ -6562,12 +6569,6 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
struct drm_display_info *info = &connector->display_info;
int num_modes = 0;
- if (!drm_edid) {
- drm_reset_display_info(connector);
- clear_eld(connector);
- return 0;
- }
-
/*
* CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks.
* To avoid multiple parsing of same block, lets parse that map
@@ -6575,8 +6576,8 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
*/
update_display_info(connector, drm_edid);
- /* Depends on info->cea_rev set by update_display_info() above */
- drm_edid_to_eld(connector, drm_edid);
+ if (!drm_edid)
+ return 0;
/*
* EDID spec says modes should be preferred in this order:
@@ -6713,10 +6714,7 @@ static int _drm_connector_update_edid_property(struct drm_connector *connector,
* that it seems better to duplicate it rather than attempt to ensure
* some arbitrary ordering of calls.
*/
- if (drm_edid)
- update_display_info(connector, drm_edid);
- else
- drm_reset_display_info(connector);
+ update_display_info(connector, drm_edid);
_drm_update_tile_info(connector, drm_edid);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 05/12] drm/edid: move EDID BPC quirk application to update_display_info()
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (3 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 04/12] drm/edid: merge ELD handling to update_display_info() Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename Jani Nikula
` (9 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
The BPC quirks are closer to home in update_display_info().
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 2246a5b10d2c..15f69c362fc3 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6467,6 +6467,18 @@ static void update_display_info(struct drm_connector *connector,
if (info->quirks & EDID_QUIRK_CAP_DSC_15BPP)
info->max_dsc_bpp = 15;
+ if (info->quirks & EDID_QUIRK_FORCE_6BPC)
+ info->bpc = 6;
+
+ if (info->quirks & EDID_QUIRK_FORCE_8BPC)
+ info->bpc = 8;
+
+ if (info->quirks & EDID_QUIRK_FORCE_10BPC)
+ info->bpc = 10;
+
+ if (info->quirks & EDID_QUIRK_FORCE_12BPC)
+ info->bpc = 12;
+
/* Depends on info->cea_rev set by drm_parse_cea_ext() above */
drm_edid_to_eld(connector, drm_edid);
}
@@ -6566,7 +6578,7 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
static int _drm_edid_connector_update(struct drm_connector *connector,
const struct drm_edid *drm_edid)
{
- struct drm_display_info *info = &connector->display_info;
+ const struct drm_display_info *info = &connector->display_info;
int num_modes = 0;
/*
@@ -6606,18 +6618,6 @@ static int _drm_edid_connector_update(struct drm_connector *connector,
if (info->quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
edid_fixup_preferred(connector);
- if (info->quirks & EDID_QUIRK_FORCE_6BPC)
- info->bpc = 6;
-
- if (info->quirks & EDID_QUIRK_FORCE_8BPC)
- info->bpc = 8;
-
- if (info->quirks & EDID_QUIRK_FORCE_10BPC)
- info->bpc = 10;
-
- if (info->quirks & EDID_QUIRK_FORCE_12BPC)
- info->bpc = 12;
-
return num_modes;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (4 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 05/12] drm/edid: move EDID BPC quirk application " Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-20 12:36 ` Ville Syrjälä
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 07/12] drm/edid: add separate drm_edid_connector_add_modes() Jani Nikula
` (8 subsequent siblings)
14 siblings, 1 reply; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
By moving update_display_info() out of _drm_edid_connector_update() we
make the function purely about adding modes. Rename accordingly.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 15f69c362fc3..4ebfd7212bce 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6575,19 +6575,12 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
return num_modes;
}
-static int _drm_edid_connector_update(struct drm_connector *connector,
- const struct drm_edid *drm_edid)
+static int _drm_edid_connector_add_modes(struct drm_connector *connector,
+ const struct drm_edid *drm_edid)
{
const struct drm_display_info *info = &connector->display_info;
int num_modes = 0;
- /*
- * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks.
- * To avoid multiple parsing of same block, lets parse that map
- * from sink info, before parsing CEA modes.
- */
- update_display_info(connector, drm_edid);
-
if (!drm_edid)
return 0;
@@ -6692,7 +6685,9 @@ int drm_edid_connector_update(struct drm_connector *connector,
{
int count;
- count = _drm_edid_connector_update(connector, drm_edid);
+ update_display_info(connector, drm_edid);
+
+ count = _drm_edid_connector_add_modes(connector, drm_edid);
_drm_update_tile_info(connector, drm_edid);
@@ -6762,7 +6757,8 @@ EXPORT_SYMBOL(drm_connector_update_edid_property);
*/
int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
{
- struct drm_edid drm_edid;
+ struct drm_edid _drm_edid;
+ const struct drm_edid *drm_edid;
if (edid && !drm_edid_is_valid(edid)) {
drm_warn(connector->dev, "[CONNECTOR:%d:%s] EDID invalid.\n",
@@ -6770,8 +6766,11 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
edid = NULL;
}
- return _drm_edid_connector_update(connector,
- drm_edid_legacy_init(&drm_edid, edid));
+ drm_edid = drm_edid_legacy_init(&_drm_edid, edid);
+
+ update_display_info(connector, drm_edid);
+
+ return _drm_edid_connector_add_modes(connector, drm_edid);
}
EXPORT_SYMBOL(drm_add_edid_modes);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 07/12] drm/edid: add separate drm_edid_connector_add_modes()
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (5 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 08/12] drm/edid: remove redundant _drm_connector_update_edid_property() Jani Nikula
` (7 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
The original goal with drm_edid_connector_update() was to have a single
call for updating the connector and adding probed modes, in this order,
but that turned out to be problematic. Drivers that need to update the
connector in the .detect() callback would end up updating the probed
modes as well. Turns out the callback may be called so many times that
the probed mode list fills up without bounds, and this is amplified by
add_alternate_cea_modes() duplicating the CEA modes on every call,
actually running out of memory on some machines.
Kudos to Imre Deak <imre.deak@intel.com> for explaining this to me.
Go back to having separate drm_edid_connector_update() and
drm_edid_connector_add_modes() calls. The former may be called from
.detect(), .force(), or .get_modes(), but the latter only from
.get_modes().
Unlike drm_add_edid_modes(), have drm_edid_connector_add_modes() update
the probed modes from the EDID property instead of the passed in
EDID. This is mainly to enforce two things:
1) drm_edid_connector_update() must be called before
drm_edid_connector_add_modes().
Display info and quirks are needed for parsing the modes, and we
don't want to call update_display_info() again to ensure the info is
available, like drm_add_edid_modes() does.
2) The same EDID is used for both updating the connector and adding the
probed modes.
Fortunately, the change is easy, because no driver has actually adopted
drm_edid_connector_update(). Not even i915, and that's mainly because of
the problem described above.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 44 +++++++++++++++++++++++-------
drivers/gpu/drm/drm_probe_helper.c | 4 ++-
include/drm/drm_edid.h | 2 ++
3 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 4ebfd7212bce..8bbd4662468e 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6673,30 +6673,54 @@ static int _drm_edid_connector_property_update(struct drm_connector *connector,
* @connector: Connector
* @drm_edid: EDID
*
- * Update the connector mode list, display info, ELD, HDR metadata, relevant
- * properties, etc. from the passed in EDID.
+ * Update the connector display info, ELD, HDR metadata, relevant properties,
+ * etc. from the passed in EDID.
*
* If EDID is NULL, reset the information.
*
- * Return: The number of modes added or 0 if we couldn't find any.
+ * Must be called before calling drm_edid_connector_add_modes().
+ *
+ * Return: 0 on success, negative error on errors.
*/
int drm_edid_connector_update(struct drm_connector *connector,
const struct drm_edid *drm_edid)
{
+ update_display_info(connector, drm_edid);
+
+ _drm_update_tile_info(connector, drm_edid);
+
+ return _drm_edid_connector_property_update(connector, drm_edid);
+}
+EXPORT_SYMBOL(drm_edid_connector_update);
+
+/**
+ * drm_edid_connector_add_modes - Update probed modes from the EDID property
+ * @connector: Connector
+ *
+ * Add the modes from the previously updated EDID property to the connector
+ * probed modes list.
+ *
+ * drm_edid_connector_update() must have been called before this to update the
+ * EDID property.
+ *
+ * Return: The number of modes added, or 0 if we couldn't find any.
+ */
+int drm_edid_connector_add_modes(struct drm_connector *connector)
+{
+ const struct drm_edid *drm_edid = NULL;
int count;
- update_display_info(connector, drm_edid);
+ if (connector->edid_blob_ptr)
+ drm_edid = drm_edid_alloc(connector->edid_blob_ptr->data,
+ connector->edid_blob_ptr->length);
count = _drm_edid_connector_add_modes(connector, drm_edid);
- _drm_update_tile_info(connector, drm_edid);
-
- /* Note: Ignore errors for now. */
- _drm_edid_connector_property_update(connector, drm_edid);
+ drm_edid_free(drm_edid);
return count;
}
-EXPORT_SYMBOL(drm_edid_connector_update);
+EXPORT_SYMBOL(drm_edid_connector_add_modes);
static int _drm_connector_update_edid_property(struct drm_connector *connector,
const struct drm_edid *drm_edid)
@@ -6751,7 +6775,7 @@ EXPORT_SYMBOL(drm_connector_update_edid_property);
* &drm_display_info structure and ELD in @connector with any information which
* can be derived from the edid.
*
- * This function is deprecated. Use drm_edid_connector_update() instead.
+ * This function is deprecated. Use drm_edid_connector_add_modes() instead.
*
* Return: The number of modes added or 0 if we couldn't find any.
*/
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
index 1ea053cef557..26844befc6f5 100644
--- a/drivers/gpu/drm/drm_probe_helper.c
+++ b/drivers/gpu/drm/drm_probe_helper.c
@@ -1139,7 +1139,9 @@ int drm_connector_helper_get_modes(struct drm_connector *connector)
* EDID. Otherwise, if the EDID is NULL, clear the connector
* information.
*/
- count = drm_edid_connector_update(connector, drm_edid);
+ drm_edid_connector_update(connector, drm_edid);
+
+ count = drm_edid_connector_add_modes(connector);
drm_edid_free(drm_edid);
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 372963600f1d..70ae6c290bdc 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -609,6 +609,8 @@ const struct drm_edid *drm_edid_read_custom(struct drm_connector *connector,
void *context);
int drm_edid_connector_update(struct drm_connector *connector,
const struct drm_edid *edid);
+int drm_edid_connector_add_modes(struct drm_connector *connector);
+
const u8 *drm_find_edid_extension(const struct drm_edid *drm_edid,
int ext_id, int *ext_index);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 08/12] drm/edid: remove redundant _drm_connector_update_edid_property()
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (6 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 07/12] drm/edid: add separate drm_edid_connector_add_modes() Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 09/12] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid Jani Nikula
` (6 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Realize that drm_edid_connector_update() and
_drm_connector_update_edid_property() are now the same thing. Drop the
latter.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_edid.c | 21 +--------------------
1 file changed, 1 insertion(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 8bbd4662468e..fc276f377c2e 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -6722,24 +6722,6 @@ int drm_edid_connector_add_modes(struct drm_connector *connector)
}
EXPORT_SYMBOL(drm_edid_connector_add_modes);
-static int _drm_connector_update_edid_property(struct drm_connector *connector,
- const struct drm_edid *drm_edid)
-{
- /*
- * Set the display info, using edid if available, otherwise resetting
- * the values to defaults. This duplicates the work done in
- * drm_add_edid_modes, but that function is not consistently called
- * before this one in all drivers and the computation is cheap enough
- * that it seems better to duplicate it rather than attempt to ensure
- * some arbitrary ordering of calls.
- */
- update_display_info(connector, drm_edid);
-
- _drm_update_tile_info(connector, drm_edid);
-
- return _drm_edid_connector_property_update(connector, drm_edid);
-}
-
/**
* drm_connector_update_edid_property - update the edid property of a connector
* @connector: drm connector
@@ -6761,8 +6743,7 @@ int drm_connector_update_edid_property(struct drm_connector *connector,
{
struct drm_edid drm_edid;
- return _drm_connector_update_edid_property(connector,
- drm_edid_legacy_init(&drm_edid, edid));
+ return drm_edid_connector_update(connector, drm_edid_legacy_init(&drm_edid, edid));
}
EXPORT_SYMBOL(drm_connector_update_edid_property);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 09/12] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (7 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 08/12] drm/edid: remove redundant _drm_connector_update_edid_property() Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 10/12] drm/i915/bios: convert intel_bios_init_panel() " Jani Nikula
` (5 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Convert all the connectors that use cached connector edid and
detect_edid to drm_edid.
Since drm_get_edid() calls drm_connector_update_edid_property() while
drm_edid_read*() do not, we need to call drm_edid_connector_update()
separately, in part due to the EDID caching behaviour in HDMI and
DP. Especially DP depends on the details parsed from EDID. (The big
behavioural change conflating EDID reading with parsing and property
update was done in commit 5186421cbfe2 ("drm: Introduce epoch counter to
drm_connector"))
v6: Rebase on drm_edid_connector_add_modes()
v5: Fix potential uninitialized var use (kernel test robot <lkp@intel.com>)
v4: Call drm_edid_connector_update() after reading HDMI/DP EDID
v3: Don't leak vga switcheroo EDID in LVDS init (Ville)
v2: Don't leak opregion fallback EDID (Ville)
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
.../gpu/drm/i915/display/intel_connector.c | 4 +-
.../drm/i915/display/intel_display_types.h | 4 +-
drivers/gpu/drm/i915/display/intel_dp.c | 83 +++++++++++--------
drivers/gpu/drm/i915/display/intel_hdmi.c | 28 ++++---
drivers/gpu/drm/i915/display/intel_lvds.c | 46 ++++++----
5 files changed, 96 insertions(+), 69 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index 562da3b741e2..4814d4e2f7f9 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -95,12 +95,12 @@ void intel_connector_destroy(struct drm_connector *connector)
{
struct intel_connector *intel_connector = to_intel_connector(connector);
- kfree(intel_connector->detect_edid);
+ drm_edid_free(intel_connector->detect_edid);
intel_hdcp_cleanup(intel_connector);
if (!IS_ERR_OR_NULL(intel_connector->edid))
- kfree(intel_connector->edid);
+ drm_edid_free(intel_connector->edid);
intel_panel_fini(intel_connector);
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 32e8b2fc3cc6..34dc850340b8 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -592,8 +592,8 @@ struct intel_connector {
struct intel_panel panel;
/* Cached EDID for eDP and LVDS. May hold ERR_PTR for invalid EDID. */
- struct edid *edid;
- struct edid *detect_edid;
+ const struct drm_edid *edid;
+ const struct drm_edid *detect_edid;
/* Number of times hotplug detection was tried after an HPD interrupt */
int hotplug_retries;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index bf80f296a8fd..6caa290ef6e6 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -3651,12 +3651,11 @@ static u8 intel_dp_autotest_edid(struct intel_dp *intel_dp)
intel_dp->aux.i2c_defer_count);
intel_dp->compliance.test_data.edid = INTEL_DP_RESOLUTION_FAILSAFE;
} else {
- struct edid *block = intel_connector->detect_edid;
+ /* FIXME: Get rid of drm_edid_raw() */
+ const struct edid *block = drm_edid_raw(intel_connector->detect_edid);
- /* We have to write the checksum
- * of the last block read
- */
- block += intel_connector->detect_edid->extensions;
+ /* We have to write the checksum of the last block read */
+ block += block->extensions;
if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_EDID_CHECKSUM,
block->checksum) <= 0)
@@ -4478,7 +4477,7 @@ bool intel_digital_port_connected(struct intel_encoder *encoder)
return is_connected;
}
-static struct edid *
+static const struct drm_edid *
intel_dp_get_edid(struct intel_dp *intel_dp)
{
struct intel_connector *intel_connector = intel_dp->attached_connector;
@@ -4489,18 +4488,22 @@ intel_dp_get_edid(struct intel_dp *intel_dp)
if (IS_ERR(intel_connector->edid))
return NULL;
- return drm_edid_duplicate(intel_connector->edid);
+ return drm_edid_dup(intel_connector->edid);
} else
- return drm_get_edid(&intel_connector->base,
- &intel_dp->aux.ddc);
+ return drm_edid_read_ddc(&intel_connector->base,
+ &intel_dp->aux.ddc);
}
static void
intel_dp_update_dfp(struct intel_dp *intel_dp,
- const struct edid *edid)
+ const struct drm_edid *drm_edid)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
struct intel_connector *connector = intel_dp->attached_connector;
+ const struct edid *edid;
+
+ /* FIXME: Get rid of drm_edid_raw() */
+ edid = drm_edid_raw(drm_edid);
intel_dp->dfp.max_bpc =
drm_dp_downstream_max_bpc(intel_dp->dpcd,
@@ -4600,21 +4603,27 @@ intel_dp_set_edid(struct intel_dp *intel_dp)
{
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
struct intel_connector *connector = intel_dp->attached_connector;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
+ const struct edid *edid;
bool vrr_capable;
intel_dp_unset_edid(intel_dp);
- edid = intel_dp_get_edid(intel_dp);
- connector->detect_edid = edid;
+ drm_edid = intel_dp_get_edid(intel_dp);
+ connector->detect_edid = drm_edid;
+
+ /* Below we depend on display info having been updated */
+ drm_edid_connector_update(&connector->base, drm_edid);
vrr_capable = intel_vrr_is_capable(connector);
drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] VRR capable: %s\n",
connector->base.base.id, connector->base.name, str_yes_no(vrr_capable));
drm_connector_set_vrr_capable_property(&connector->base, vrr_capable);
- intel_dp_update_dfp(intel_dp, edid);
+ intel_dp_update_dfp(intel_dp, drm_edid);
intel_dp_update_420(intel_dp);
+ /* FIXME: Get rid of drm_edid_raw() */
+ edid = drm_edid_raw(drm_edid);
if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
intel_dp->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
intel_dp->has_audio = drm_detect_monitor_audio(edid);
@@ -4629,7 +4638,7 @@ intel_dp_unset_edid(struct intel_dp *intel_dp)
struct intel_connector *connector = intel_dp->attached_connector;
drm_dp_cec_unset_edid(&intel_dp->aux);
- kfree(connector->detect_edid);
+ drm_edid_free(connector->detect_edid);
connector->detect_edid = NULL;
intel_dp->has_hdmi_sink = false;
@@ -4793,12 +4802,10 @@ intel_dp_force(struct drm_connector *connector)
static int intel_dp_get_modes(struct drm_connector *connector)
{
struct intel_connector *intel_connector = to_intel_connector(connector);
- struct edid *edid;
- int num_modes = 0;
+ int num_modes;
- edid = intel_connector->detect_edid;
- if (edid)
- num_modes = intel_connector_update_modes(connector, edid);
+ /* drm_edid_connector_update() done in ->detect() or ->force() */
+ num_modes = drm_edid_connector_add_modes(connector);
/* Also add fixed mode, which may or may not be present in EDID */
if (intel_dp_is_edp(intel_attached_dp(intel_connector)))
@@ -4807,7 +4814,7 @@ static int intel_dp_get_modes(struct drm_connector *connector)
if (num_modes)
return num_modes;
- if (!edid) {
+ if (!intel_connector->detect_edid) {
struct intel_dp *intel_dp = intel_attached_dp(intel_connector);
struct drm_display_mode *mode;
@@ -5243,7 +5250,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
struct drm_display_mode *fixed_mode;
struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
bool has_dpcd;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
if (!intel_dp_is_edp(intel_dp))
return true;
@@ -5290,29 +5297,35 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
}
mutex_lock(&dev_priv->drm.mode_config.mutex);
- edid = drm_get_edid(connector, &intel_dp->aux.ddc);
- if (!edid) {
+ drm_edid = drm_edid_read_ddc(connector, &intel_dp->aux.ddc);
+ if (!drm_edid) {
+ const struct edid *edid;
+
/* Fallback to EDID from ACPI OpRegion, if any */
+ /* FIXME: Make intel_opregion_get_edid() return drm_edid */
edid = intel_opregion_get_edid(intel_connector);
- if (edid)
+ if (edid) {
+ drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
drm_dbg_kms(&dev_priv->drm,
"[CONNECTOR:%d:%s] Using OpRegion EDID\n",
connector->base.id, connector->name);
- }
- if (edid) {
- if (drm_add_edid_modes(connector, edid)) {
- drm_connector_update_edid_property(connector, edid);
- } else {
kfree(edid);
- edid = ERR_PTR(-EINVAL);
+ }
+ }
+ if (drm_edid) {
+ if (drm_edid_connector_update(connector, drm_edid) ||
+ !drm_edid_connector_add_modes(connector)) {
+ drm_edid_connector_update(connector, NULL);
+ drm_edid_free(drm_edid);
+ drm_edid = ERR_PTR(-EINVAL);
}
} else {
- edid = ERR_PTR(-ENOENT);
+ drm_edid = ERR_PTR(-ENOENT);
}
- intel_connector->edid = edid;
+ intel_connector->edid = drm_edid;
- intel_bios_init_panel_late(dev_priv, &intel_connector->panel,
- encoder->devdata, IS_ERR(edid) ? NULL : edid);
+ intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
+ IS_ERR_OR_NULL(drm_edid) ? NULL : drm_edid_raw(drm_edid));
intel_panel_add_edid_fixed_modes(intel_connector, true);
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index efa2da080f62..e69b14704494 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2359,7 +2359,7 @@ intel_hdmi_unset_edid(struct drm_connector *connector)
intel_hdmi->dp_dual_mode.type = DRM_DP_DUAL_MODE_NONE;
intel_hdmi->dp_dual_mode.max_tmds_clock = 0;
- kfree(to_intel_connector(connector)->detect_edid);
+ drm_edid_free(to_intel_connector(connector)->detect_edid);
to_intel_connector(connector)->detect_edid = NULL;
}
@@ -2420,7 +2420,8 @@ intel_hdmi_set_edid(struct drm_connector *connector)
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
intel_wakeref_t wakeref;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
+ const struct edid *edid;
bool connected = false;
struct i2c_adapter *i2c;
@@ -2428,17 +2429,23 @@ intel_hdmi_set_edid(struct drm_connector *connector)
i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
- edid = drm_get_edid(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, i2c);
- if (!edid && !intel_gmbus_is_forced_bit(i2c)) {
+ if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
drm_dbg_kms(&dev_priv->drm,
"HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n");
intel_gmbus_force_bit(i2c, true);
- edid = drm_get_edid(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, i2c);
intel_gmbus_force_bit(i2c, false);
}
- to_intel_connector(connector)->detect_edid = edid;
+ /* Below we depend on display info having been updated */
+ drm_edid_connector_update(connector, drm_edid);
+
+ to_intel_connector(connector)->detect_edid = drm_edid;
+
+ /* FIXME: Get rid of drm_edid_raw() */
+ edid = drm_edid_raw(drm_edid);
if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) {
intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
intel_hdmi->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
@@ -2514,13 +2521,8 @@ intel_hdmi_force(struct drm_connector *connector)
static int intel_hdmi_get_modes(struct drm_connector *connector)
{
- struct edid *edid;
-
- edid = to_intel_connector(connector)->detect_edid;
- if (edid == NULL)
- return 0;
-
- return intel_connector_update_modes(connector, edid);
+ /* drm_edid_connector_update() done in ->detect() or ->force() */
+ return drm_edid_connector_add_modes(connector);
}
static struct i2c_adapter *
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index aecec992cd0d..6a98787edf48 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -479,8 +479,11 @@ static int intel_lvds_get_modes(struct drm_connector *connector)
struct intel_connector *intel_connector = to_intel_connector(connector);
/* use cached edid if we have one */
- if (!IS_ERR_OR_NULL(intel_connector->edid))
- return drm_add_edid_modes(connector, intel_connector->edid);
+ if (!IS_ERR_OR_NULL(intel_connector->edid)) {
+ drm_edid_connector_update(connector, intel_connector->edid);
+
+ return drm_edid_connector_add_modes(connector);
+ }
return intel_panel_get_modes(intel_connector);
}
@@ -834,7 +837,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
struct intel_connector *intel_connector;
struct drm_connector *connector;
struct drm_encoder *encoder;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
i915_reg_t lvds_reg;
u32 lvds;
u8 pin;
@@ -945,27 +948,36 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
* preferred mode is the right one.
*/
mutex_lock(&dev_priv->drm.mode_config.mutex);
- if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC)
+ if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC) {
+ const struct edid *edid;
+
+ /* FIXME: Make drm_get_edid_switcheroo() return drm_edid */
edid = drm_get_edid_switcheroo(connector,
- intel_gmbus_get_adapter(dev_priv, pin));
- else
- edid = drm_get_edid(connector,
- intel_gmbus_get_adapter(dev_priv, pin));
- if (edid) {
- if (drm_add_edid_modes(connector, edid)) {
- drm_connector_update_edid_property(connector,
- edid);
- } else {
+ intel_gmbus_get_adapter(dev_priv, pin));
+ if (edid) {
+ drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
kfree(edid);
- edid = ERR_PTR(-EINVAL);
+ } else {
+ drm_edid = NULL;
+ }
+ } else {
+ drm_edid = drm_edid_read_ddc(connector,
+ intel_gmbus_get_adapter(dev_priv, pin));
+ }
+ if (drm_edid) {
+ if (drm_edid_connector_update(connector, drm_edid) ||
+ !drm_edid_connector_add_modes(connector)) {
+ drm_edid_connector_update(connector, NULL);
+ drm_edid_free(drm_edid);
+ drm_edid = ERR_PTR(-EINVAL);
}
} else {
- edid = ERR_PTR(-ENOENT);
+ drm_edid = ERR_PTR(-ENOENT);
}
- intel_connector->edid = edid;
+ intel_connector->edid = drm_edid;
intel_bios_init_panel_late(dev_priv, &intel_connector->panel, NULL,
- IS_ERR(edid) ? NULL : edid);
+ IS_ERR_OR_NULL(drm_edid) ? NULL : drm_edid_raw(drm_edid));
/* Try EDID first */
intel_panel_add_edid_fixed_modes(intel_connector, true);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 10/12] drm/i915/bios: convert intel_bios_init_panel() to drm_edid
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (8 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 09/12] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 11/12] drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid Jani Nikula
` (4 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Try to use struct drm_edid where possible, even if having to fall back
to looking into struct edid down low via drm_edid_raw().
v2: Rebase
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 23 ++++++++++++-----------
drivers/gpu/drm/i915/display/intel_bios.h | 4 ++--
drivers/gpu/drm/i915/display/intel_dp.c | 2 +-
drivers/gpu/drm/i915/display/intel_lvds.c | 2 +-
4 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 55544d484318..9badd77d656a 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -620,14 +620,14 @@ static void dump_pnp_id(struct drm_i915_private *i915,
static int opregion_get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid, bool use_fallback)
+ const struct drm_edid *drm_edid, bool use_fallback)
{
return intel_opregion_get_panel_type(i915);
}
static int vbt_get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid, bool use_fallback)
+ const struct drm_edid *drm_edid, bool use_fallback)
{
const struct bdb_lvds_options *lvds_options;
@@ -652,12 +652,13 @@ static int vbt_get_panel_type(struct drm_i915_private *i915,
static int pnpid_get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid, bool use_fallback)
+ const struct drm_edid *drm_edid, bool use_fallback)
{
const struct bdb_lvds_lfp_data *data;
const struct bdb_lvds_lfp_data_ptrs *ptrs;
const struct lvds_pnp_id *edid_id;
struct lvds_pnp_id edid_id_nodate;
+ const struct edid *edid = drm_edid_raw(drm_edid); /* FIXME */
int i, best = -1;
if (!edid)
@@ -701,7 +702,7 @@ static int pnpid_get_panel_type(struct drm_i915_private *i915,
static int fallback_get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid, bool use_fallback)
+ const struct drm_edid *drm_edid, bool use_fallback)
{
return use_fallback ? 0 : -1;
}
@@ -715,13 +716,13 @@ enum panel_type {
static int get_panel_type(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid, bool use_fallback)
+ const struct drm_edid *drm_edid, bool use_fallback)
{
struct {
const char *name;
int (*get_panel_type)(struct drm_i915_private *i915,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid, bool use_fallback);
+ const struct drm_edid *drm_edid, bool use_fallback);
int panel_type;
} panel_types[] = {
[PANEL_TYPE_OPREGION] = {
@@ -745,7 +746,7 @@ static int get_panel_type(struct drm_i915_private *i915,
for (i = 0; i < ARRAY_SIZE(panel_types); i++) {
panel_types[i].panel_type = panel_types[i].get_panel_type(i915, devdata,
- edid, use_fallback);
+ drm_edid, use_fallback);
drm_WARN_ON(&i915->drm, panel_types[i].panel_type > 0xf &&
panel_types[i].panel_type != 0xff);
@@ -3187,7 +3188,7 @@ void intel_bios_init(struct drm_i915_private *i915)
static void intel_bios_init_panel(struct drm_i915_private *i915,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid,
+ const struct drm_edid *drm_edid,
bool use_fallback)
{
/* already have it? */
@@ -3197,7 +3198,7 @@ static void intel_bios_init_panel(struct drm_i915_private *i915,
}
panel->vbt.panel_type = get_panel_type(i915, devdata,
- edid, use_fallback);
+ drm_edid, use_fallback);
if (panel->vbt.panel_type < 0) {
drm_WARN_ON(&i915->drm, use_fallback);
return;
@@ -3228,9 +3229,9 @@ void intel_bios_init_panel_early(struct drm_i915_private *i915,
void intel_bios_init_panel_late(struct drm_i915_private *i915,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid)
+ const struct drm_edid *drm_edid)
{
- intel_bios_init_panel(i915, panel, devdata, edid, true);
+ intel_bios_init_panel(i915, panel, devdata, drm_edid, true);
}
/**
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index ff1fdd2e0c1c..d221f784aa88 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -32,8 +32,8 @@
#include <linux/types.h>
+struct drm_edid;
struct drm_i915_private;
-struct edid;
struct intel_bios_encoder_data;
struct intel_crtc_state;
struct intel_encoder;
@@ -238,7 +238,7 @@ void intel_bios_init_panel_early(struct drm_i915_private *dev_priv,
void intel_bios_init_panel_late(struct drm_i915_private *dev_priv,
struct intel_panel *panel,
const struct intel_bios_encoder_data *devdata,
- const struct edid *edid);
+ const struct drm_edid *drm_edid);
void intel_bios_fini_panel(struct intel_panel *panel);
void intel_bios_driver_remove(struct drm_i915_private *dev_priv);
bool intel_bios_is_valid_vbt(const void *buf, size_t size);
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 6caa290ef6e6..a64e97808813 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5325,7 +5325,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
intel_connector->edid = drm_edid;
intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
- IS_ERR_OR_NULL(drm_edid) ? NULL : drm_edid_raw(drm_edid));
+ IS_ERR(drm_edid) ? NULL : drm_edid);
intel_panel_add_edid_fixed_modes(intel_connector, true);
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 6a98787edf48..9f6910bba2e9 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -977,7 +977,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
intel_connector->edid = drm_edid;
intel_bios_init_panel_late(dev_priv, &intel_connector->panel, NULL,
- IS_ERR_OR_NULL(drm_edid) ? NULL : drm_edid_raw(drm_edid));
+ IS_ERR(drm_edid) ? NULL : drm_edid);
/* Try EDID first */
intel_panel_add_edid_fixed_modes(intel_connector, true);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 11/12] drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (9 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 10/12] drm/i915/bios: convert intel_bios_init_panel() " Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 12/12] drm/i915/panel: move panel fixed EDID to struct intel_panel Jani Nikula
` (3 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
Simplify validation and use by converting to drm_edid.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 10 ++-----
drivers/gpu/drm/i915/display/intel_opregion.c | 29 +++++++------------
drivers/gpu/drm/i915/display/intel_opregion.h | 4 +--
3 files changed, 15 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index a64e97808813..67f2cb048ac1 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5299,18 +5299,12 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
mutex_lock(&dev_priv->drm.mode_config.mutex);
drm_edid = drm_edid_read_ddc(connector, &intel_dp->aux.ddc);
if (!drm_edid) {
- const struct edid *edid;
-
/* Fallback to EDID from ACPI OpRegion, if any */
- /* FIXME: Make intel_opregion_get_edid() return drm_edid */
- edid = intel_opregion_get_edid(intel_connector);
- if (edid) {
- drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
+ drm_edid = intel_opregion_get_edid(intel_connector);
+ if (drm_edid)
drm_dbg_kms(&dev_priv->drm,
"[CONNECTOR:%d:%s] Using OpRegion EDID\n",
connector->base.id, connector->name);
- kfree(edid);
- }
}
if (drm_edid) {
if (drm_edid_connector_update(connector, drm_edid) ||
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
index e0184745632c..b8dce0576512 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.c
+++ b/drivers/gpu/drm/i915/display/intel_opregion.c
@@ -1101,41 +1101,34 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
* The EDID in the OpRegion, or NULL if there is none or it's invalid.
*
*/
-struct edid *intel_opregion_get_edid(struct intel_connector *intel_connector)
+const struct drm_edid *intel_opregion_get_edid(struct intel_connector *intel_connector)
{
struct drm_connector *connector = &intel_connector->base;
struct drm_i915_private *i915 = to_i915(connector->dev);
struct intel_opregion *opregion = &i915->display.opregion;
- const void *in_edid;
- const struct edid *edid;
- struct edid *new_edid;
+ const struct drm_edid *drm_edid;
+ const void *edid;
int len;
if (!opregion->asle_ext)
return NULL;
- in_edid = opregion->asle_ext->bddc;
+ edid = opregion->asle_ext->bddc;
/* Validity corresponds to number of 128-byte blocks */
len = (opregion->asle_ext->phed & ASLE_PHED_EDID_VALID_MASK) * 128;
- if (!len || !memchr_inv(in_edid, 0, len))
+ if (!len || !memchr_inv(edid, 0, len))
return NULL;
- edid = in_edid;
+ drm_edid = drm_edid_alloc(edid, len);
- if (len < EDID_LENGTH * (1 + edid->extensions)) {
- drm_dbg_kms(&i915->drm, "Invalid EDID in ACPI OpRegion (Mailbox #5): too short\n");
- return NULL;
- }
- new_edid = drm_edid_duplicate(edid);
- if (!new_edid)
- return NULL;
- if (!drm_edid_is_valid(new_edid)) {
- kfree(new_edid);
+ if (!drm_edid_valid(drm_edid)) {
drm_dbg_kms(&i915->drm, "Invalid EDID in ACPI OpRegion (Mailbox #5)\n");
- return NULL;
+ drm_edid_free(drm_edid);
+ drm_edid = NULL;
}
- return new_edid;
+
+ return drm_edid;
}
bool intel_opregion_headless_sku(struct drm_i915_private *i915)
diff --git a/drivers/gpu/drm/i915/display/intel_opregion.h b/drivers/gpu/drm/i915/display/intel_opregion.h
index 2f261f985400..d02e6696a050 100644
--- a/drivers/gpu/drm/i915/display/intel_opregion.h
+++ b/drivers/gpu/drm/i915/display/intel_opregion.h
@@ -74,7 +74,7 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv,
pci_power_t state);
int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv);
-struct edid *intel_opregion_get_edid(struct intel_connector *connector);
+const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector);
bool intel_opregion_headless_sku(struct drm_i915_private *i915);
@@ -123,7 +123,7 @@ static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev)
return -ENODEV;
}
-static inline struct edid *
+static inline const struct drm_edid *
intel_opregion_get_edid(struct intel_connector *connector)
{
return NULL;
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] [PATCH v6 12/12] drm/i915/panel: move panel fixed EDID to struct intel_panel
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (10 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 11/12] drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid Jani Nikula
@ 2022-12-16 16:00 ` Jani Nikula
2022-12-18 23:35 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/edid, drm/i915: further drm_edid work, finally switch i915 over Patchwork
` (2 subsequent siblings)
14 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-16 16:00 UTC (permalink / raw)
To: intel-gfx, dri-devel; +Cc: jani.nikula
It's a bit confusing to have two cached EDIDs in struct intel_connector
with slightly different purposes. Make the distinction a bit clearer by
moving the EDID cached for eDP and LVDS panels at connector init time to
struct intel_panel, and name it fixed_edid. That's what it is, a fixed
EDID for the panels.
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/display/icl_dsi.c | 2 +-
.../gpu/drm/i915/display/intel_connector.c | 3 ---
.../drm/i915/display/intel_display_types.h | 6 ++++--
drivers/gpu/drm/i915/display/intel_dp.c | 20 +++++++++----------
drivers/gpu/drm/i915/display/intel_dvo.c | 2 +-
drivers/gpu/drm/i915/display/intel_lvds.c | 11 +++++-----
drivers/gpu/drm/i915/display/intel_panel.c | 10 +++++++++-
drivers/gpu/drm/i915/display/intel_panel.h | 4 +++-
drivers/gpu/drm/i915/display/intel_sdvo.c | 2 +-
drivers/gpu/drm/i915/display/vlv_dsi.c | 2 +-
10 files changed, 35 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
index ae14c794c4bc..d56d01f07bb7 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -2054,7 +2054,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
goto err;
}
- intel_panel_init(intel_connector);
+ intel_panel_init(intel_connector, NULL);
intel_backlight_setup(intel_connector, INVALID_PIPE);
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index 4814d4e2f7f9..257afac34839 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -99,9 +99,6 @@ void intel_connector_destroy(struct drm_connector *connector)
intel_hdcp_cleanup(intel_connector);
- if (!IS_ERR_OR_NULL(intel_connector->edid))
- drm_edid_free(intel_connector->edid);
-
intel_panel_fini(intel_connector);
drm_connector_cleanup(connector);
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 34dc850340b8..6feb232bb1c2 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -351,6 +351,9 @@ struct intel_vbt_panel_data {
};
struct intel_panel {
+ /* Fixed EDID for eDP and LVDS. May hold ERR_PTR for invalid EDID. */
+ const struct drm_edid *fixed_edid;
+
struct list_head fixed_modes;
/* backlight */
@@ -591,8 +594,7 @@ struct intel_connector {
/* Panel info for eDP and LVDS */
struct intel_panel panel;
- /* Cached EDID for eDP and LVDS. May hold ERR_PTR for invalid EDID. */
- const struct drm_edid *edid;
+ /* Cached EDID for detect. */
const struct drm_edid *detect_edid;
/* Number of times hotplug detection was tried after an HPD interrupt */
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 67f2cb048ac1..3f4396b5f029 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4480,18 +4480,19 @@ bool intel_digital_port_connected(struct intel_encoder *encoder)
static const struct drm_edid *
intel_dp_get_edid(struct intel_dp *intel_dp)
{
- struct intel_connector *intel_connector = intel_dp->attached_connector;
+ struct intel_connector *connector = intel_dp->attached_connector;
+ const struct drm_edid *fixed_edid = connector->panel.fixed_edid;
- /* use cached edid if we have one */
- if (intel_connector->edid) {
+ /* Use panel fixed edid if we have one */
+ if (fixed_edid) {
/* invalid edid */
- if (IS_ERR(intel_connector->edid))
+ if (IS_ERR(fixed_edid))
return NULL;
- return drm_edid_dup(intel_connector->edid);
- } else
- return drm_edid_read_ddc(&intel_connector->base,
- &intel_dp->aux.ddc);
+ return drm_edid_dup(fixed_edid);
+ }
+
+ return drm_edid_read_ddc(&connector->base, &intel_dp->aux.ddc);
}
static void
@@ -5316,7 +5317,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
} else {
drm_edid = ERR_PTR(-ENOENT);
}
- intel_connector->edid = drm_edid;
intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
IS_ERR(drm_edid) ? NULL : drm_edid);
@@ -5343,7 +5343,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
goto out_vdd_off;
}
- intel_panel_init(intel_connector);
+ intel_panel_init(intel_connector, drm_edid);
intel_edp_backlight_setup(intel_dp, intel_connector);
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
index 4aeae0f3ac91..0be8105cb18a 100644
--- a/drivers/gpu/drm/i915/display/intel_dvo.c
+++ b/drivers/gpu/drm/i915/display/intel_dvo.c
@@ -554,6 +554,6 @@ void intel_dvo_init(struct drm_i915_private *i915)
*/
intel_panel_add_encoder_fixed_mode(connector, encoder);
- intel_panel_init(connector);
+ intel_panel_init(connector, NULL);
}
}
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 9f6910bba2e9..a1557d84ce0a 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -477,10 +477,11 @@ static int intel_lvds_compute_config(struct intel_encoder *intel_encoder,
static int intel_lvds_get_modes(struct drm_connector *connector)
{
struct intel_connector *intel_connector = to_intel_connector(connector);
+ const struct drm_edid *fixed_edid = intel_connector->panel.fixed_edid;
- /* use cached edid if we have one */
- if (!IS_ERR_OR_NULL(intel_connector->edid)) {
- drm_edid_connector_update(connector, intel_connector->edid);
+ /* Use panel fixed edid if we have one */
+ if (!IS_ERR_OR_NULL(fixed_edid)) {
+ drm_edid_connector_update(connector, fixed_edid);
return drm_edid_connector_add_modes(connector);
}
@@ -974,8 +975,6 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
} else {
drm_edid = ERR_PTR(-ENOENT);
}
- intel_connector->edid = drm_edid;
-
intel_bios_init_panel_late(dev_priv, &intel_connector->panel, NULL,
IS_ERR(drm_edid) ? NULL : drm_edid);
@@ -1000,7 +999,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv)
if (!intel_panel_preferred_fixed_mode(intel_connector))
goto failed;
- intel_panel_init(intel_connector);
+ intel_panel_init(intel_connector, drm_edid);
intel_backlight_setup(intel_connector, INVALID_PIPE);
diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
index 3b1004b019a8..42aa04bac261 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -31,6 +31,8 @@
#include <linux/kernel.h>
#include <linux/pwm.h>
+#include <drm/drm_edid.h>
+
#include "i915_reg.h"
#include "intel_backlight.h"
#include "intel_connector.h"
@@ -670,10 +672,13 @@ void intel_panel_init_alloc(struct intel_connector *connector)
INIT_LIST_HEAD(&panel->fixed_modes);
}
-int intel_panel_init(struct intel_connector *connector)
+int intel_panel_init(struct intel_connector *connector,
+ const struct drm_edid *fixed_edid)
{
struct intel_panel *panel = &connector->panel;
+ panel->fixed_edid = fixed_edid;
+
intel_backlight_init_funcs(panel);
if (!has_drrs_modes(connector))
@@ -692,6 +697,9 @@ void intel_panel_fini(struct intel_connector *connector)
struct intel_panel *panel = &connector->panel;
struct drm_display_mode *fixed_mode, *next;
+ if (!IS_ERR_OR_NULL(panel->fixed_edid))
+ drm_edid_free(panel->fixed_edid);
+
intel_backlight_destroy(panel);
intel_bios_fini_panel(panel);
diff --git a/drivers/gpu/drm/i915/display/intel_panel.h b/drivers/gpu/drm/i915/display/intel_panel.h
index 4b51e1c51da6..15a8c897b33f 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.h
+++ b/drivers/gpu/drm/i915/display/intel_panel.h
@@ -13,13 +13,15 @@ enum drrs_type;
struct drm_connector;
struct drm_connector_state;
struct drm_display_mode;
+struct drm_edid;
struct drm_i915_private;
struct intel_connector;
struct intel_crtc_state;
struct intel_encoder;
void intel_panel_init_alloc(struct intel_connector *connector);
-int intel_panel_init(struct intel_connector *connector);
+int intel_panel_init(struct intel_connector *connector,
+ const struct drm_edid *fixed_edid);
void intel_panel_fini(struct intel_connector *connector);
enum drm_connector_status
intel_panel_detect(struct drm_connector *connector, bool force);
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 21805c15d5eb..c58e5cfa8e88 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2903,7 +2903,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
mutex_unlock(&i915->drm.mode_config.mutex);
}
- intel_panel_init(intel_connector);
+ intel_panel_init(intel_connector, NULL);
if (!intel_panel_preferred_fixed_mode(intel_connector))
goto err;
diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
index 662bdb656aa3..2289f6b1b4eb 100644
--- a/drivers/gpu/drm/i915/display/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
@@ -1983,7 +1983,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
goto err_cleanup_connector;
}
- intel_panel_init(intel_connector);
+ intel_panel_init(intel_connector, NULL);
intel_backlight_setup(intel_connector, INVALID_PIPE);
--
2.34.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/edid, drm/i915: further drm_edid work, finally switch i915 over
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (11 preceding siblings ...)
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 12/12] drm/i915/panel: move panel fixed EDID to struct intel_panel Jani Nikula
@ 2022-12-18 23:35 ` Patchwork
2022-12-19 0:02 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-12-19 2:11 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
14 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2022-12-18 23:35 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Series Details ==
Series: drm/edid, drm/i915: further drm_edid work, finally switch i915 over
URL : https://patchwork.freedesktop.org/series/112014/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for drm/edid, drm/i915: further drm_edid work, finally switch i915 over
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (12 preceding siblings ...)
2022-12-18 23:35 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/edid, drm/i915: further drm_edid work, finally switch i915 over Patchwork
@ 2022-12-19 0:02 ` Patchwork
2022-12-19 2:11 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
14 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2022-12-19 0:02 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 6178 bytes --]
== Series Details ==
Series: drm/edid, drm/i915: further drm_edid work, finally switch i915 over
URL : https://patchwork.freedesktop.org/series/112014/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_12512 -> Patchwork_112014v1
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/index.html
Participating hosts (42 -> 41)
------------------------------
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_112014v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@hangcheck:
- fi-hsw-4770: [PASS][1] -> [INCOMPLETE][2] ([i915#4785])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/fi-hsw-4770/igt@i915_selftest@live@hangcheck.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-hsw-4770/igt@i915_selftest@live@hangcheck.html
* igt@i915_selftest@live@late_gt_pm:
- fi-kbl-soraka: [PASS][3] -> [INCOMPLETE][4] ([i915#7640])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/fi-kbl-soraka/igt@i915_selftest@live@late_gt_pm.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-kbl-soraka/igt@i915_selftest@live@late_gt_pm.html
* igt@kms_chamelium@common-hpd-after-suspend:
- fi-rkl-guc: NOTRUN -> [SKIP][5] ([fdo#111827])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-rkl-guc/igt@kms_chamelium@common-hpd-after-suspend.html
* igt@runner@aborted:
- fi-hsw-4770: NOTRUN -> [FAIL][6] ([fdo#109271] / [i915#4312] / [i915#5594])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-hsw-4770/igt@runner@aborted.html
#### Possible fixes ####
* igt@gem_exec_gttfill@basic:
- fi-pnv-d510: [FAIL][7] ([i915#7229]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/fi-pnv-d510/igt@gem_exec_gttfill@basic.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-pnv-d510/igt@gem_exec_gttfill@basic.html
* igt@i915_selftest@live@reset:
- {bat-rpls-2}: [DMESG-FAIL][9] ([i915#4983]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/bat-rpls-2/igt@i915_selftest@live@reset.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/bat-rpls-2/igt@i915_selftest@live@reset.html
* igt@i915_selftest@live@slpc:
- {bat-rpls-1}: [DMESG-FAIL][11] ([i915#6367]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/bat-rpls-1/igt@i915_selftest@live@slpc.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/bat-rpls-1/igt@i915_selftest@live@slpc.html
* igt@i915_selftest@live@workarounds:
- fi-rkl-guc: [INCOMPLETE][13] ([i915#4983]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/fi-rkl-guc/igt@i915_selftest@live@workarounds.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-rkl-guc/igt@i915_selftest@live@workarounds.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions:
- fi-bsw-kefka: [FAIL][15] ([i915#6298]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
[i915#2867]: https://gitlab.freedesktop.org/drm/intel/issues/2867
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
[i915#4785]: https://gitlab.freedesktop.org/drm/intel/issues/4785
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[i915#5594]: https://gitlab.freedesktop.org/drm/intel/issues/5594
[i915#6298]: https://gitlab.freedesktop.org/drm/intel/issues/6298
[i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
[i915#6687]: https://gitlab.freedesktop.org/drm/intel/issues/6687
[i915#6997]: https://gitlab.freedesktop.org/drm/intel/issues/6997
[i915#7229]: https://gitlab.freedesktop.org/drm/intel/issues/7229
[i915#7640]: https://gitlab.freedesktop.org/drm/intel/issues/7640
Build changes
-------------
* Linux: CI_DRM_12512 -> Patchwork_112014v1
CI-20190529: 20190529
CI_DRM_12512: 32c0d1e3ac9cf7e7b64a53dcafeeb7173a2f511b @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7096: f2f515390fb11554d22c7b78b94e288026545326 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_112014v1: 32c0d1e3ac9cf7e7b64a53dcafeeb7173a2f511b @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
19cfb754f006 drm/i915/panel: move panel fixed EDID to struct intel_panel
c73c073bcd09 drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid
6e80a9b19ba4 drm/i915/bios: convert intel_bios_init_panel() to drm_edid
8b107bb88b1f drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
1c4bbd7e7add drm/edid: remove redundant _drm_connector_update_edid_property()
5c97d47a354e drm/edid: add separate drm_edid_connector_add_modes()
e0fb0aaa185c drm/edid: refactor _drm_edid_connector_update() and rename
f489f13b2aa6 drm/edid: move EDID BPC quirk application to update_display_info()
719561475c4e drm/edid: merge ELD handling to update_display_info()
e490c7d21d16 drm/edid: rename struct drm_display_info *display to *info
586e11f4b8b9 drm/edid: stop passing quirks around
1adda2be073f drm/edid: store quirks in display info
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/index.html
[-- Attachment #2: Type: text/html, Size: 6807 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Intel-gfx] ✗ Fi.CI.IGT: failure for drm/edid, drm/i915: further drm_edid work, finally switch i915 over
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
` (13 preceding siblings ...)
2022-12-19 0:02 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
@ 2022-12-19 2:11 ` Patchwork
14 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2022-12-19 2:11 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 23493 bytes --]
== Series Details ==
Series: drm/edid, drm/i915: further drm_edid work, finally switch i915 over
URL : https://patchwork.freedesktop.org/series/112014/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_12512_full -> Patchwork_112014v1_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_112014v1_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_112014v1_full, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/index.html
Participating hosts (13 -> 10)
------------------------------
Missing (3): pig-skl-6260u pig-kbl-iris pig-glk-j5005
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_112014v1_full:
### IGT changes ###
#### Possible regressions ####
* igt@perf_pmu@busy-idle@vecs0:
- shard-glk: [PASS][1] -> [FAIL][2] +3 similar issues
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk8/igt@perf_pmu@busy-idle@vecs0.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk3/igt@perf_pmu@busy-idle@vecs0.html
* igt@perf_pmu@cpu-hotplug:
- shard-glk: [PASS][3] -> [TIMEOUT][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk8/igt@perf_pmu@cpu-hotplug.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk3/igt@perf_pmu@cpu-hotplug.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* {igt@i915_hwmon@hwmon-write}:
- {shard-tglu-9}: NOTRUN -> [SKIP][5]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-9/igt@i915_hwmon@hwmon-write.html
* igt@kms_vblank@pipe-a-query-forked-busy-hang:
- {shard-dg1}: NOTRUN -> [SKIP][6]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-dg1-17/igt@kms_vblank@pipe-a-query-forked-busy-hang.html
Known issues
------------
Here are the changes found in Patchwork_112014v1_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@feature_discovery@display-4x:
- shard-glk: NOTRUN -> [SKIP][7] ([fdo#109271]) +5 similar issues
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk4/igt@feature_discovery@display-4x.html
* igt@gem_exec_fair@basic-deadline:
- shard-glk: [PASS][8] -> [FAIL][9] ([i915#2846])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk3/igt@gem_exec_fair@basic-deadline.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk4/igt@gem_exec_fair@basic-deadline.html
* igt@gem_exec_fair@basic-none-rrul@rcs0:
- shard-glk: NOTRUN -> [FAIL][10] ([i915#2842])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk9/igt@gem_exec_fair@basic-none-rrul@rcs0.html
* igt@gem_lmem_swapping@parallel-random:
- shard-glk: NOTRUN -> [SKIP][11] ([fdo#109271] / [i915#4613])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk1/igt@gem_lmem_swapping@parallel-random.html
* igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_mc_ccs:
- shard-glk: NOTRUN -> [SKIP][12] ([fdo#109271] / [i915#3886])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk7/igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_mc_ccs.html
* igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a2:
- shard-glk: [PASS][13] -> [FAIL][14] ([i915#79])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk8/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a2.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk9/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a2.html
#### Possible fixes ####
* igt@fbdev@nullptr:
- {shard-rkl}: [SKIP][15] ([i915#2582]) -> [PASS][16] +1 similar issue
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-3/igt@fbdev@nullptr.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-6/igt@fbdev@nullptr.html
* igt@gem_ctx_isolation@nonpriv@vecs0:
- {shard-rkl}: [FAIL][17] ([i915#7673]) -> [PASS][18] +3 similar issues
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-4/igt@gem_ctx_isolation@nonpriv@vecs0.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-5/igt@gem_ctx_isolation@nonpriv@vecs0.html
* igt@gem_exec_fair@basic-pace@rcs0:
- {shard-rkl}: [FAIL][19] ([i915#2842]) -> [PASS][20] +1 similar issue
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-1/igt@gem_exec_fair@basic-pace@rcs0.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-5/igt@gem_exec_fair@basic-pace@rcs0.html
* igt@gem_exec_fair@basic-pace@vcs0:
- shard-glk: [FAIL][21] ([i915#2842]) -> [PASS][22] +2 similar issues
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk6/igt@gem_exec_fair@basic-pace@vcs0.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk9/igt@gem_exec_fair@basic-pace@vcs0.html
* igt@gem_exec_reloc@basic-gtt-cpu-active:
- {shard-rkl}: [SKIP][23] ([i915#3281]) -> [PASS][24] +3 similar issues
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-2/igt@gem_exec_reloc@basic-gtt-cpu-active.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-5/igt@gem_exec_reloc@basic-gtt-cpu-active.html
* igt@gem_pread@snoop:
- {shard-rkl}: [SKIP][25] ([i915#3282]) -> [PASS][26] +2 similar issues
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-4/igt@gem_pread@snoop.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-5/igt@gem_pread@snoop.html
* igt@gen9_exec_parse@batch-without-end:
- {shard-rkl}: [SKIP][27] ([i915#2527]) -> [PASS][28]
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-3/igt@gen9_exec_parse@batch-without-end.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-5/igt@gen9_exec_parse@batch-without-end.html
* igt@i915_pm_dc@dc6-psr:
- {shard-rkl}: [SKIP][29] ([i915#658]) -> [PASS][30]
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-5/igt@i915_pm_dc@dc6-psr.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-6/igt@i915_pm_dc@dc6-psr.html
* igt@i915_pm_rc6_residency@rc6-idle@vcs0:
- {shard-dg1}: [FAIL][31] ([i915#3591]) -> [PASS][32]
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@vcs0.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@vcs0.html
* igt@i915_pm_rpm@modeset-lpsp:
- {shard-tglu}: [SKIP][33] ([i915#1397]) -> [PASS][34]
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@i915_pm_rpm@modeset-lpsp.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-5/igt@i915_pm_rpm@modeset-lpsp.html
* igt@i915_pm_rpm@modeset-lpsp-stress:
- {shard-dg1}: [SKIP][35] ([i915#1397]) -> [PASS][36] +1 similar issue
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-dg1-17/igt@i915_pm_rpm@modeset-lpsp-stress.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-dg1-14/igt@i915_pm_rpm@modeset-lpsp-stress.html
* igt@kms_big_fb@linear-32bpp-rotate-0:
- {shard-rkl}: [SKIP][37] ([i915#1845] / [i915#4098]) -> [PASS][38] +22 similar issues
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-1/igt@kms_big_fb@linear-32bpp-rotate-0.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-6/igt@kms_big_fb@linear-32bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-16bpp-rotate-0:
- shard-glk: [FAIL][39] ([i915#5138]) -> [PASS][40]
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk6/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk7/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- {shard-tglu}: [SKIP][41] -> [PASS][42] +9 similar issues
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_flip@modeset-vs-vblank-race@c-hdmi-a2:
- shard-glk: [FAIL][43] ([i915#407]) -> [PASS][44]
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-glk2/igt@kms_flip@modeset-vs-vblank-race@c-hdmi-a2.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-glk7/igt@kms_flip@modeset-vs-vblank-race@c-hdmi-a2.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-gtt:
- {shard-tglu}: [SKIP][45] ([i915#1849]) -> [PASS][46] +3 similar issues
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-gtt.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-1p-rte:
- {shard-tglu}: ([PASS][47], [SKIP][48]) ([i915#1849]) -> [PASS][49] +3 similar issues
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-3/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render:
- {shard-rkl}: [SKIP][50] ([i915#1849] / [i915#4098]) -> [PASS][51] +11 similar issues
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html
* igt@kms_psr@cursor_mmap_cpu:
- {shard-rkl}: [SKIP][52] ([i915#1072]) -> [PASS][53] +1 similar issue
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-3/igt@kms_psr@cursor_mmap_cpu.html
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-6/igt@kms_psr@cursor_mmap_cpu.html
* igt@kms_universal_plane@universal-plane-pipe-c-functional:
- {shard-tglu}: [SKIP][54] ([fdo#109274]) -> [PASS][55] +1 similar issue
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@kms_universal_plane@universal-plane-pipe-c-functional.html
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-5/igt@kms_universal_plane@universal-plane-pipe-c-functional.html
* igt@kms_vblank@pipe-b-ts-continuation-idle-hang:
- {shard-tglu}: [SKIP][56] ([i915#1845]) -> [PASS][57]
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@kms_vblank@pipe-b-ts-continuation-idle-hang.html
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-5/igt@kms_vblank@pipe-b-ts-continuation-idle-hang.html
* igt@kms_vblank@pipe-c-wait-forked:
- {shard-tglu}: ([PASS][58], [SKIP][59]) -> [PASS][60] +4 similar issues
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-4/igt@kms_vblank@pipe-c-wait-forked.html
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-tglu-6/igt@kms_vblank@pipe-c-wait-forked.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-tglu-5/igt@kms_vblank@pipe-c-wait-forked.html
* igt@perf@gen12-mi-rpc:
- {shard-rkl}: [SKIP][61] ([fdo#109289]) -> [PASS][62]
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-5/igt@perf@gen12-mi-rpc.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-1/igt@perf@gen12-mi-rpc.html
* igt@testdisplay:
- {shard-rkl}: [SKIP][63] ([i915#4098]) -> [PASS][64] +1 similar issue
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12512/shard-rkl-5/igt@testdisplay.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112014v1/shard-rkl-6/igt@testdisplay.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#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[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#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
[fdo#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302
[fdo#109312]: https://bugs.freedesktop.org/show_bug.cgi?id=109312
[fdo#109313]: https://bugs.freedesktop.org/show_bug.cgi?id=109313
[fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
[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#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#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#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#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
[i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
[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#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
[i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
[i915#2994]: https://gitlab.freedesktop.org/drm/intel/issues/2994
[i915#3002]: https://gitlab.freedesktop.org/drm/intel/issues/3002
[i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
[i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
[i915#3528]: https://gitlab.freedesktop.org/drm/intel/issues/3528
[i915#3536]: https://gitlab.freedesktop.org/drm/intel/issues/3536
[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#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
[i915#3810]: https://gitlab.freedesktop.org/drm/intel/issues/3810
[i915#3825]: https://gitlab.freedesktop.org/drm/intel/issues/3825
[i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
[i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
[i915#3966]: https://gitlab.freedesktop.org/drm/intel/issues/3966
[i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
[i915#407]: https://gitlab.freedesktop.org/drm/intel/issues/407
[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#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
[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#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
[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#4877]: https://gitlab.freedesktop.org/drm/intel/issues/4877
[i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
[i915#4991]: https://gitlab.freedesktop.org/drm/intel/issues/4991
[i915#5122]: https://gitlab.freedesktop.org/drm/intel/issues/5122
[i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138
[i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
[i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[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#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
[i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
[i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
[i915#6247]: https://gitlab.freedesktop.org/drm/intel/issues/6247
[i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
[i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
[i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
[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#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
[i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
[i915#6946]: https://gitlab.freedesktop.org/drm/intel/issues/6946
[i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
[i915#7037]: https://gitlab.freedesktop.org/drm/intel/issues/7037
[i915#7052]: https://gitlab.freedesktop.org/drm/intel/issues/7052
[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#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
[i915#7582]: https://gitlab.freedesktop.org/drm/intel/issues/7582
[i915#7651]: https://gitlab.freedesktop.org/drm/intel/issues/7651
[i915#7673]: https://gitlab.freedesktop.org/drm/intel/issues/7673
[i915#7678]: https://gitlab.freedesktop.org/drm/intel/issues/7678
[i915#7679]: https://gitlab.freedesktop.org/drm/intel/issues/7679
[i915#7681]: https://gitlab.freedesktop.org/drm/intel/issues/7681
[i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
[i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
Build changes
-------------
* Linux: CI_DRM_12512 -> Patchwork_112014v1
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_12512: 32c0d1e3ac9cf7e7b64a53dcafeeb7173a2f511b @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7096: f2f515390fb11554d22c7b78b94e288026545326 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_112014v1: 32c0d1e3ac9cf7e7b64a53dcafeeb7173a2f511b @ 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_112014v1/index.html
[-- Attachment #2: Type: text/html, Size: 17598 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename Jani Nikula
@ 2022-12-20 12:36 ` Ville Syrjälä
2022-12-20 12:52 ` Jani Nikula
0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2022-12-20 12:36 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, dri-devel
On Fri, Dec 16, 2022 at 06:00:20PM +0200, Jani Nikula wrote:
> By moving update_display_info() out of _drm_edid_connector_update() we
> make the function purely about adding modes.
I don't think that's quite true. The 4:2:0 stuff still updates
various display_info things from the mode parsing functions.
> Rename accordingly.
>
> Cc: Imre Deak <imre.deak@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 25 ++++++++++++-------------
> 1 file changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 15f69c362fc3..4ebfd7212bce 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -6575,19 +6575,12 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
> return num_modes;
> }
>
> -static int _drm_edid_connector_update(struct drm_connector *connector,
> - const struct drm_edid *drm_edid)
> +static int _drm_edid_connector_add_modes(struct drm_connector *connector,
> + const struct drm_edid *drm_edid)
> {
> const struct drm_display_info *info = &connector->display_info;
> int num_modes = 0;
>
> - /*
> - * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks.
> - * To avoid multiple parsing of same block, lets parse that map
> - * from sink info, before parsing CEA modes.
> - */
> - update_display_info(connector, drm_edid);
> -
> if (!drm_edid)
> return 0;
>
> @@ -6692,7 +6685,9 @@ int drm_edid_connector_update(struct drm_connector *connector,
> {
> int count;
>
> - count = _drm_edid_connector_update(connector, drm_edid);
> + update_display_info(connector, drm_edid);
> +
> + count = _drm_edid_connector_add_modes(connector, drm_edid);
>
> _drm_update_tile_info(connector, drm_edid);
>
> @@ -6762,7 +6757,8 @@ EXPORT_SYMBOL(drm_connector_update_edid_property);
> */
> int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
> {
> - struct drm_edid drm_edid;
> + struct drm_edid _drm_edid;
> + const struct drm_edid *drm_edid;
>
> if (edid && !drm_edid_is_valid(edid)) {
> drm_warn(connector->dev, "[CONNECTOR:%d:%s] EDID invalid.\n",
> @@ -6770,8 +6766,11 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
> edid = NULL;
> }
>
> - return _drm_edid_connector_update(connector,
> - drm_edid_legacy_init(&drm_edid, edid));
> + drm_edid = drm_edid_legacy_init(&_drm_edid, edid);
> +
> + update_display_info(connector, drm_edid);
> +
> + return _drm_edid_connector_add_modes(connector, drm_edid);
> }
> EXPORT_SYMBOL(drm_add_edid_modes);
>
> --
> 2.34.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename
2022-12-20 12:36 ` Ville Syrjälä
@ 2022-12-20 12:52 ` Jani Nikula
2022-12-20 13:02 ` Ville Syrjälä
0 siblings, 1 reply; 20+ messages in thread
From: Jani Nikula @ 2022-12-20 12:52 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx, dri-devel
On Tue, 20 Dec 2022, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Fri, Dec 16, 2022 at 06:00:20PM +0200, Jani Nikula wrote:
>> By moving update_display_info() out of _drm_edid_connector_update() we
>> make the function purely about adding modes.
>
> I don't think that's quite true. The 4:2:0 stuff still updates
> various display_info things from the mode parsing functions.
Right. I meant the top level. Will amend the commit message.
BR,
Jani.
>
>> Rename accordingly.
>>
>> Cc: Imre Deak <imre.deak@intel.com>
>> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>> drivers/gpu/drm/drm_edid.c | 25 ++++++++++++-------------
>> 1 file changed, 12 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> index 15f69c362fc3..4ebfd7212bce 100644
>> --- a/drivers/gpu/drm/drm_edid.c
>> +++ b/drivers/gpu/drm/drm_edid.c
>> @@ -6575,19 +6575,12 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
>> return num_modes;
>> }
>>
>> -static int _drm_edid_connector_update(struct drm_connector *connector,
>> - const struct drm_edid *drm_edid)
>> +static int _drm_edid_connector_add_modes(struct drm_connector *connector,
>> + const struct drm_edid *drm_edid)
>> {
>> const struct drm_display_info *info = &connector->display_info;
>> int num_modes = 0;
>>
>> - /*
>> - * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks.
>> - * To avoid multiple parsing of same block, lets parse that map
>> - * from sink info, before parsing CEA modes.
>> - */
>> - update_display_info(connector, drm_edid);
>> -
>> if (!drm_edid)
>> return 0;
>>
>> @@ -6692,7 +6685,9 @@ int drm_edid_connector_update(struct drm_connector *connector,
>> {
>> int count;
>>
>> - count = _drm_edid_connector_update(connector, drm_edid);
>> + update_display_info(connector, drm_edid);
>> +
>> + count = _drm_edid_connector_add_modes(connector, drm_edid);
>>
>> _drm_update_tile_info(connector, drm_edid);
>>
>> @@ -6762,7 +6757,8 @@ EXPORT_SYMBOL(drm_connector_update_edid_property);
>> */
>> int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
>> {
>> - struct drm_edid drm_edid;
>> + struct drm_edid _drm_edid;
>> + const struct drm_edid *drm_edid;
>>
>> if (edid && !drm_edid_is_valid(edid)) {
>> drm_warn(connector->dev, "[CONNECTOR:%d:%s] EDID invalid.\n",
>> @@ -6770,8 +6766,11 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
>> edid = NULL;
>> }
>>
>> - return _drm_edid_connector_update(connector,
>> - drm_edid_legacy_init(&drm_edid, edid));
>> + drm_edid = drm_edid_legacy_init(&_drm_edid, edid);
>> +
>> + update_display_info(connector, drm_edid);
>> +
>> + return _drm_edid_connector_add_modes(connector, drm_edid);
>> }
>> EXPORT_SYMBOL(drm_add_edid_modes);
>>
>> --
>> 2.34.1
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename
2022-12-20 12:52 ` Jani Nikula
@ 2022-12-20 13:02 ` Ville Syrjälä
2022-12-20 13:44 ` Jani Nikula
0 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjälä @ 2022-12-20 13:02 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, dri-devel
On Tue, Dec 20, 2022 at 02:52:01PM +0200, Jani Nikula wrote:
> On Tue, 20 Dec 2022, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Fri, Dec 16, 2022 at 06:00:20PM +0200, Jani Nikula wrote:
> >> By moving update_display_info() out of _drm_edid_connector_update() we
> >> make the function purely about adding modes.
> >
> > I don't think that's quite true. The 4:2:0 stuff still updates
> > various display_info things from the mode parsing functions.
>
> Right. I meant the top level. Will amend the commit message.
So what's going to happen with the 4:2:0 stuff? Are we just clobbering
it if/when someone calls the update_display_info() stuff w/o calling
add_modes()?
>
> BR,
> Jani.
>
>
> >
> >> Rename accordingly.
> >>
> >> Cc: Imre Deak <imre.deak@intel.com>
> >> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >> ---
> >> drivers/gpu/drm/drm_edid.c | 25 ++++++++++++-------------
> >> 1 file changed, 12 insertions(+), 13 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> >> index 15f69c362fc3..4ebfd7212bce 100644
> >> --- a/drivers/gpu/drm/drm_edid.c
> >> +++ b/drivers/gpu/drm/drm_edid.c
> >> @@ -6575,19 +6575,12 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
> >> return num_modes;
> >> }
> >>
> >> -static int _drm_edid_connector_update(struct drm_connector *connector,
> >> - const struct drm_edid *drm_edid)
> >> +static int _drm_edid_connector_add_modes(struct drm_connector *connector,
> >> + const struct drm_edid *drm_edid)
> >> {
> >> const struct drm_display_info *info = &connector->display_info;
> >> int num_modes = 0;
> >>
> >> - /*
> >> - * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks.
> >> - * To avoid multiple parsing of same block, lets parse that map
> >> - * from sink info, before parsing CEA modes.
> >> - */
> >> - update_display_info(connector, drm_edid);
> >> -
> >> if (!drm_edid)
> >> return 0;
> >>
> >> @@ -6692,7 +6685,9 @@ int drm_edid_connector_update(struct drm_connector *connector,
> >> {
> >> int count;
> >>
> >> - count = _drm_edid_connector_update(connector, drm_edid);
> >> + update_display_info(connector, drm_edid);
> >> +
> >> + count = _drm_edid_connector_add_modes(connector, drm_edid);
> >>
> >> _drm_update_tile_info(connector, drm_edid);
> >>
> >> @@ -6762,7 +6757,8 @@ EXPORT_SYMBOL(drm_connector_update_edid_property);
> >> */
> >> int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
> >> {
> >> - struct drm_edid drm_edid;
> >> + struct drm_edid _drm_edid;
> >> + const struct drm_edid *drm_edid;
> >>
> >> if (edid && !drm_edid_is_valid(edid)) {
> >> drm_warn(connector->dev, "[CONNECTOR:%d:%s] EDID invalid.\n",
> >> @@ -6770,8 +6766,11 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
> >> edid = NULL;
> >> }
> >>
> >> - return _drm_edid_connector_update(connector,
> >> - drm_edid_legacy_init(&drm_edid, edid));
> >> + drm_edid = drm_edid_legacy_init(&_drm_edid, edid);
> >> +
> >> + update_display_info(connector, drm_edid);
> >> +
> >> + return _drm_edid_connector_add_modes(connector, drm_edid);
> >> }
> >> EXPORT_SYMBOL(drm_add_edid_modes);
> >>
> >> --
> >> 2.34.1
>
> --
> Jani Nikula, Intel Open Source Graphics Center
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename
2022-12-20 13:02 ` Ville Syrjälä
@ 2022-12-20 13:44 ` Jani Nikula
0 siblings, 0 replies; 20+ messages in thread
From: Jani Nikula @ 2022-12-20 13:44 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx, dri-devel
On Tue, 20 Dec 2022, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Tue, Dec 20, 2022 at 02:52:01PM +0200, Jani Nikula wrote:
>> On Tue, 20 Dec 2022, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > On Fri, Dec 16, 2022 at 06:00:20PM +0200, Jani Nikula wrote:
>> >> By moving update_display_info() out of _drm_edid_connector_update() we
>> >> make the function purely about adding modes.
>> >
>> > I don't think that's quite true. The 4:2:0 stuff still updates
>> > various display_info things from the mode parsing functions.
>>
>> Right. I meant the top level. Will amend the commit message.
>
> So what's going to happen with the 4:2:0 stuff? Are we just clobbering
> it if/when someone calls the update_display_info() stuff w/o calling
> add_modes()?
Don't do that then?
*sigh*
I don't know.
It's pretty much the same thing as only calling update_display_info(),
before adding modes, and looking at the relevant info fields *before*
the add modes call. That's probably already happening.
I really wanted to put this all together into one call so nobody could
do that silly stuff. But then for various reasons drivers want to not
only read the EDID but also parse it in ->detect, and ->detect gets
called a lot.
We can't keep adding modes to probed modes in ->detect all the time
without pruning them. I thought about trying to avoid adding duplicated
modes in probed modes list, but it looks like another rabbit hole with
no end in sight. Don't really want to go that route.
If we want to make this fool proof, one way to fix this would be to do
all the info changes in step 1, even the ones that are currently added
via add modes. Iterate through everything, but only do the info
changes. And in step 2 only add the modes to probed modes list.
In any case, the current state of affairs is bonkers already. There's
supposed to be 1) reading the EDID, 2) updating the info, and 3) adding
the modes. But both drm_get_edid() *and* drm_add_edid_modes() do the
display info and property update part too. We've just been adding calls
here and there to patch things up. Nobody cares. Just add more calls
updating stuff, and hope it'll be fine. That's gotta stop.
BR,
Jani.
>
>>
>> BR,
>> Jani.
>>
>>
>> >
>> >> Rename accordingly.
>> >>
>> >> Cc: Imre Deak <imre.deak@intel.com>
>> >> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> >> ---
>> >> drivers/gpu/drm/drm_edid.c | 25 ++++++++++++-------------
>> >> 1 file changed, 12 insertions(+), 13 deletions(-)
>> >>
>> >> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
>> >> index 15f69c362fc3..4ebfd7212bce 100644
>> >> --- a/drivers/gpu/drm/drm_edid.c
>> >> +++ b/drivers/gpu/drm/drm_edid.c
>> >> @@ -6575,19 +6575,12 @@ static int add_displayid_detailed_modes(struct drm_connector *connector,
>> >> return num_modes;
>> >> }
>> >>
>> >> -static int _drm_edid_connector_update(struct drm_connector *connector,
>> >> - const struct drm_edid *drm_edid)
>> >> +static int _drm_edid_connector_add_modes(struct drm_connector *connector,
>> >> + const struct drm_edid *drm_edid)
>> >> {
>> >> const struct drm_display_info *info = &connector->display_info;
>> >> int num_modes = 0;
>> >>
>> >> - /*
>> >> - * CEA-861-F adds ycbcr capability map block, for HDMI 2.0 sinks.
>> >> - * To avoid multiple parsing of same block, lets parse that map
>> >> - * from sink info, before parsing CEA modes.
>> >> - */
>> >> - update_display_info(connector, drm_edid);
>> >> -
>> >> if (!drm_edid)
>> >> return 0;
>> >>
>> >> @@ -6692,7 +6685,9 @@ int drm_edid_connector_update(struct drm_connector *connector,
>> >> {
>> >> int count;
>> >>
>> >> - count = _drm_edid_connector_update(connector, drm_edid);
>> >> + update_display_info(connector, drm_edid);
>> >> +
>> >> + count = _drm_edid_connector_add_modes(connector, drm_edid);
>> >>
>> >> _drm_update_tile_info(connector, drm_edid);
>> >>
>> >> @@ -6762,7 +6757,8 @@ EXPORT_SYMBOL(drm_connector_update_edid_property);
>> >> */
>> >> int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
>> >> {
>> >> - struct drm_edid drm_edid;
>> >> + struct drm_edid _drm_edid;
>> >> + const struct drm_edid *drm_edid;
>> >>
>> >> if (edid && !drm_edid_is_valid(edid)) {
>> >> drm_warn(connector->dev, "[CONNECTOR:%d:%s] EDID invalid.\n",
>> >> @@ -6770,8 +6766,11 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
>> >> edid = NULL;
>> >> }
>> >>
>> >> - return _drm_edid_connector_update(connector,
>> >> - drm_edid_legacy_init(&drm_edid, edid));
>> >> + drm_edid = drm_edid_legacy_init(&_drm_edid, edid);
>> >> +
>> >> + update_display_info(connector, drm_edid);
>> >> +
>> >> + return _drm_edid_connector_add_modes(connector, drm_edid);
>> >> }
>> >> EXPORT_SYMBOL(drm_add_edid_modes);
>> >>
>> >> --
>> >> 2.34.1
>>
>> --
>> Jani Nikula, Intel Open Source Graphics Center
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2022-12-20 13:45 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-16 16:00 [Intel-gfx] [PATCH v6 00/12] drm/edid, drm/i915: further drm_edid work, finally switch i915 over Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 01/12] drm/edid: store quirks in display info Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 02/12] drm/edid: stop passing quirks around Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 03/12] drm/edid: rename struct drm_display_info *display to *info Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 04/12] drm/edid: merge ELD handling to update_display_info() Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 05/12] drm/edid: move EDID BPC quirk application " Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 06/12] drm/edid: refactor _drm_edid_connector_update() and rename Jani Nikula
2022-12-20 12:36 ` Ville Syrjälä
2022-12-20 12:52 ` Jani Nikula
2022-12-20 13:02 ` Ville Syrjälä
2022-12-20 13:44 ` Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 07/12] drm/edid: add separate drm_edid_connector_add_modes() Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 08/12] drm/edid: remove redundant _drm_connector_update_edid_property() Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 09/12] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 10/12] drm/i915/bios: convert intel_bios_init_panel() " Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 11/12] drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid Jani Nikula
2022-12-16 16:00 ` [Intel-gfx] [PATCH v6 12/12] drm/i915/panel: move panel fixed EDID to struct intel_panel Jani Nikula
2022-12-18 23:35 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/edid, drm/i915: further drm_edid work, finally switch i915 over Patchwork
2022-12-19 0:02 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-12-19 2:11 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox