drm/edid: info & modes parsing and drm_edid refactors
v8 cover drm/edid: info & modes parsing and drm_edid refactors
A bunch of patches merged, thanks to Ville's review, here's another spin to get CI on the updated patch 1. The rest remain unchanged.
Jani Nikula (8):
drm/edid: split HDMI VSDB info and mode parsing 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 | 93 +++++++++++-------- 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_edid.h | 2 + 18 files changed, 201 insertions(+), 163 deletions(-)
Signature · 1 line
2.34.1
PATCH v8 1/8 drm/edid: split HDMI VSDB info and mode parsing
Separate the parsing of display info and modes from the HDMI VSDB. This is prerequisite work for overall better separation of the two parsing steps.
The info parsing is about figuring out whether the sink supports HDMI infoframes. Since they were added in HDMI 1.4, assume the sink supports HDMI infoframes if it has the HDMI_Video_present bit set (introduced in HDMI 1.4). For details, see commit f1781e9bb2dd ("drm/edid: Allow HDMI infoframe without VIC or S3D").
The logic is not exactly the same, but since it was somewhat heuristic to begin with, assume this is close enough.
v2:
- Simplify to only check HDMI_Video_present bit (Ville)
- Drop cea_db_raw_size() helper (Ville)
--- drivers/gpu/drm/drm_edid.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/gpu/drm/drm_edid.c +10 -3
@@ -4713,7 +4713,6 @@ static int hdmi_vsdb_latency_length(const u8 *db)static int do_hdmi_vsdb_modes (struct drm_connector *connector,const u8 *db,u8 len) { -struct drm_display_info *info = &connector->display_info;int modes =0 , offset =0 , i, multi_present =0 , multi_len;u8 vic_len, hdmi_3d_len =0 ;u16 mask;
@@ -4831,8 +4830,6 @@ do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len) } out: -if (modes >0 ) - info->has_hdmi_infoframe = true;return modes; }
@@ -6153,6 +6150,7 @@ static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector, } } +/* HDMI Vendor-Specific Data Block (HDMI VSDB, H14b-VSDB) */ static void drm_parse_hdmi_vsdb_video (struct drm_connector *connector,const u8 *db) {
@@ -6166,6 +6164,15 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)if (len >=7 ) info->max_tmds_clock = db[7 ] *5000 ; +/* +* Try to infer whether the sink supports HDMI infoframes. +* +* HDMI infoframe support was first added in HDMI 1.4. Assume the sink +* supports infoframes if HDMI_Video_present is set. +*/ +if (len >=8 && db[8 ] &BIT (5 )) + info->has_hdmi_infoframe = true; +drm_dbg_kms (connector->dev,"[CONNECTOR:%d:%s] HDMI: DVI dual %d, max TMDS clock %d kHz\n" , connector->base.id, connector->name, info->dvi_dual, info->max_tmds_clock);
Signature · 1 line
2.34.1
PATCH v8 2/8 drm/edid: refactor _drm_edid_connector_update() and rename
In reply to Jani NikulaBy moving update_display_info() out of _drm_edid_connector_update() we make the function purely about adding modes. Rename accordingly.
--- drivers/gpu/drm/drm_edid.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-)
drivers/gpu/drm/drm_edid.c +12 -13
@@ -6637,19 +6637,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 ;
@@ -6754,7 +6747,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);
@@ -6824,7 +6819,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",
@@ -6832,8 +6828,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);
Signature · 1 line
2.34.1
PATCH v8 3/8 drm/edid: add separate drm_edid_connector_add_modes()
In reply to Jani NikulaThe 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 <[email protected]> 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.
--- 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(-)
drivers/gpu/drm/drm_edid.c +34 -10
@@ -6735,30 +6735,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)
@@ -6813,7 +6837,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. */
drivers/gpu/drm/drm_probe_helper.c +3 -1
@@ -1163,7 +1163,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);
include/drm/drm_edid.h +2 -0
@@ -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);
Signature · 1 line
2.34.1
PATCH v8 4/8 drm/edid: remove redundant _drm_connector_update_edid_property()
In reply to Jani NikulaRealize that drm_edid_connector_update() and _drm_connector_update_edid_property() are now the same thing. Drop the latter.
--- drivers/gpu/drm/drm_edid.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-)
drivers/gpu/drm/drm_edid.c +1 -20
@@ -6784,24 +6784,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
@@ -6823,8 +6805,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);
Signature · 1 line
2.34.1
Re: [PATCH v8 4/8] drm/edid: remove redundant _drm_connector_update_edid_property()
Quoted 7 lines · Jani Nikula
Realize that
drm_edid_connector_update()and_drm_connector_update_edid_property()are now the same thing. Drop the latter.Cc Ville Syrjälä <[email protected]>Reviewed-by Ville Syrjälä <[email protected]>Signed-off-by Jani Nikula <[email protected]>
Thanks for the reviews, pushed 1-4 to drm-misc-next.
BR,
Jani.
Quoted 42 lines
--- drivers/gpu/drm/drm_edid.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-)drivers/gpu/drm/drm_edid.c +1
-20@@ -6784,24 +6784,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 @@ -6823,8 +6805,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);
Signature · 1 line
Jani Nikula, Intel Open Source Graphics Center
PATCH v8 5/8 drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
In reply to Jani NikulaConvert 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 <[email protected]>)
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)
--- .../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(-)
drivers/gpu/drm/i915/display/intel_connector.c +2 -2
@@ -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);
drivers/gpu/drm/i915/display/intel_display_types.h +2 -2
@@ -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;
drivers/gpu/drm/i915/display/intel_dp.c +48 -35
168 lines not on this page · raw message
drivers/gpu/drm/i915/display/intel_hdmi.c +15 -13
@@ -2360,7 +2360,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 ; }
@@ -2421,7 +2421,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;
@@ -2429,17 +2430,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);
@@ -2515,13 +2522,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 *
drivers/gpu/drm/i915/display/intel_lvds.c +29 -17
71 lines not on this page · raw message
Signature · 1 line
2.34.1
Re: [PATCH v8 5/8] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
Quoted 318 lines · Jani Nikula
Convert all the connectors that use cached connector edid and
detect_edidtodrm_edid.Since
drm_get_edid()callsdrm_connector_update_edid_property()while drm_edid_read*() do not, we need to calldrm_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 commit5186421cbfe2("drm: Introduce epoch counter todrm_connector"))v6: Rebase on
drm_edid_connector_add_modes()v5: Fix potential uninitialized var use (kernel test robot <[email protected]>)
v4: Call
drm_edid_connector_update()after reading HDMI/DP EDIDv3: Don't leak vga switcheroo EDID in LVDS init (Ville)
v2: Don't leak opregion fallback EDID (Ville)
Cc Ville Syrjälä <[email protected]>Signed-off-by Jani Nikula <[email protected]>--- .../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(-)drivers/gpu/drm/i915/display/intel_connector.c +2
-2@@ -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);drivers/gpu/drm/i915/display/intel_display_types.h +2
-2@@ -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;drivers/gpu/drm/i915/display/intel_dp.c +48
-35@@ -3648,12 +3648,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 )@@ -4475,7 +4474,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;@@ -4486,18 +4485,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,@@ -4597,21 +4600,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);@@ -4626,7 +4635,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;@@ -4790,12 +4799,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)))@@ -4804,7 +4811,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;@@ -5240,7 +5247,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;@@ -5287,29 +5294,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);drivers/gpu/drm/i915/display/intel_hdmi.c +15
-13@@ -2360,7 +2360,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 ; }@@ -2421,7 +2421,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;@@ -2429,17 +2430,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);@@ -2515,13 +2522,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 *drivers/gpu/drm/i915/display/intel_lvds.c +0
-0
drivers/gpu/drm/i915/display/intel_lvds.c static int intel_lvds_get_modes(struct drm_connector *connector) · line 483
Quoted 7 lines
drivers/gpu/drm/i915/display/intel_lvds.c +2
-2@@ -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);
Isn't this update redundant?
Quoted 68 lines
drivers/gpu/drm/i915/display/intel_lvds.c +27
-15+ +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);Signature · 1 line
2.34.1
Signature · 2 lines
Ville Syrjälä Intel
Re: [PATCH v8 5/8] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
Quoted 8 lines · Ville Syrjälä
Quoted 7 lines · Jani Nikula
drivers/gpu/drm/i915/display/intel_lvds.c +0
-0@@ -479,8 +479,11 @@ static int intel_lvds_get_modes(struct drm_connector *connector)struct intel_connector *intel_connector =to_intel_connector (connector);
Quoted 7 lines
drivers/gpu/drm/i915/display/intel_lvds.c static int intel_lvds_get_modes(struct drm_connector *connector) · line 483
Quoted 5 lines
drivers/gpu/drm/i915/display/intel_lvds.c +2
-2/* 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);Isn't this update redundant?
Maybe far fetched, but if the user does connector force disable via debugfs, drm_helper_probe_single_connector_modes() will clear the EDID property and display info. And after that, nobody's going to do the connector update again unless we do it here.
BR,
Jani.
Quoted 69 lines
Quoted 69 lines
drivers/gpu/drm/i915/display/intel_lvds.c +27
-15+ +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);Signature · 1 line
2.34.1
Signature · 1 line
Jani Nikula, Intel Open Source Graphics Center
Ville Syrjälä
Reviewed-byRe: [PATCH v8 5/8] drm/i915/edid: convert DP, HDMI and LVDS to drm_edid
Quoted 17 lines · Jani Nikula
Quoted 8 lines · Ville Syrjälä
Quoted 7 lines · Jani Nikula
drivers/gpu/drm/i915/display/intel_lvds.c +0
-0@@ -479,8 +479,11 @@ static int intel_lvds_get_modes(struct drm_connector *connector)struct intel_connector *intel_connector =to_intel_connector (connector);Quoted 7 lines
drivers/gpu/drm/i915/display/intel_lvds.c static int intel_lvds_get_modes(struct drm_connector *connector) · line 483
Quoted 5 lines
drivers/gpu/drm/i915/display/intel_lvds.c +2
-2/* 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);Isn't this update redundant?
Quoted 4 lines
Maybe far fetched, but if the user does connector force disable via debugfs,
drm_helper_probe_single_connector_modes()will clear the EDID property and display info. And after that, nobody's going to do the connector update again unless we do it here.
Right, DP/HDMI take care of that in .force(), we have no .force() for LVDS atm. And I take the encoder types not handled in this patch will keep using some older get_edid() thingy that will do the update for them also from .get_modes()? Hmm, apart from the encoders using intel_panel_get_modes() which I suppose must already be busted...
I guess we should think about unifying the behaviour for all the encoder types, including using detect_edid for everything...
Anyways, that's something for the future. For the time being
Quoted 78 lines
BR,
Jani.Quoted 69 lines
Quoted 69 lines
drivers/gpu/drm/i915/display/intel_lvds.c +27
-15+ +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);Signature · 1 line
2.34.1Signature · 1 line
Jani Nikula, Intel Open Source Graphics Center
Signature · 2 lines
Ville Syrjälä Intel
PATCH v8 6/8 drm/i915/bios: convert intel_bios_init_panel() to drm_edid
In reply to Jani NikulaTry 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
--- 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(-)
drivers/gpu/drm/i915/display/intel_bios.c +12 -11
@@ -619,14 +619,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;
@@ -651,12 +651,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)
@@ -700,7 +701,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 ; }
@@ -714,13 +715,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 ] = {
@@ -744,7 +745,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 );
@@ -3186,7 +3187,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? */
@@ -3196,7 +3197,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 ;
@@ -3227,9 +3228,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); }/**
drivers/gpu/drm/i915/display/intel_bios.h +2 -2
@@ -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);
drivers/gpu/drm/i915/display/intel_dp.c +1 -1
@@ -5322,7 +5322,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);
drivers/gpu/drm/i915/display/intel_lvds.c +1 -1
@@ -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);
Signature · 1 line
2.34.1
Re: [PATCH v8 6/8] drm/i915/bios: convert intel_bios_init_panel() to drm_edid
Quoted 7 lines · Jani Nikula
Try to use struct
drm_edidwhere possible, even if having to fall back to looking into struct edid down low viadrm_edid_raw().v2: Rebase
Cc Ville Syrjälä <[email protected]>Signed-off-by Jani Nikula <[email protected]>
Quoted 158 lines
--- 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(-)drivers/gpu/drm/i915/display/intel_bios.c +12
-11@@ -619,14 +619,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;@@ -651,12 +651,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)@@ -700,7 +701,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 ; }@@ -714,13 +715,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 ] = {@@ -744,7 +745,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 );@@ -3186,7 +3187,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? */ @@ -3196,7 +3197,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 ;@@ -3227,9 +3228,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); }/** drivers/gpu/drm/i915/display/intel_bios.h +2
-2@@ -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);drivers/gpu/drm/i915/display/intel_dp.c +1
-1@@ -5322,7 +5322,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);drivers/gpu/drm/i915/display/intel_lvds.c +1
-1@@ -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);Signature · 1 line
2.34.1
Signature · 2 lines
Ville Syrjälä Intel
PATCH v8 7/8 drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid
In reply to Jani NikulaSimplify validation and use by converting to drm_edid.
--- 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(-)
drivers/gpu/drm/i915/display/intel_dp.c +2 -8
@@ -5296,18 +5296,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) ||
drivers/gpu/drm/i915/display/intel_opregion.c +11 -18
@@ -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)
drivers/gpu/drm/i915/display/intel_opregion.h +2 -2
@@ -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 ;
Signature · 1 line
2.34.1
Re: [PATCH v8 7/8] drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid
Quoted 4 lines · Jani Nikula
Simplify validation and use by converting to
drm_edid.Cc Ville Syrjälä <[email protected]>Signed-off-by Jani Nikula <[email protected]>
Quoted 112 lines
--- 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(-)drivers/gpu/drm/i915/display/intel_dp.c +2
-8@@ -5296,18 +5296,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) ||drivers/gpu/drm/i915/display/intel_opregion.c +11
-18@@ -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)drivers/gpu/drm/i915/display/intel_opregion.h +2
-2@@ -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 ;Signature · 1 line
2.34.1
Signature · 2 lines
Ville Syrjälä Intel
PATCH v8 8/8 drm/i915/panel: move panel fixed EDID to struct intel_panel
In reply to Jani NikulaIt'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.
--- 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(-)
drivers/gpu/drm/i915/display/icl_dsi.c +1 -1
@@ -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 );
drivers/gpu/drm/i915/display/intel_connector.c +0 -3
@@ -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);
drivers/gpu/drm/i915/display/intel_display_types.h +4 -2
@@ -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 */
drivers/gpu/drm/i915/display/intel_dp.c +10 -10
@@ -4477,18 +4477,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
@@ -5313,7 +5314,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);
@@ -5340,7 +5340,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);
drivers/gpu/drm/i915/display/intel_dvo.c +1 -1
@@ -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 ); } }
drivers/gpu/drm/i915/display/intel_lvds.c +5 -6
@@ -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 );
drivers/gpu/drm/i915/display/intel_panel.c +9 -1
@@ -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);
drivers/gpu/drm/i915/display/intel_panel.h +3 -1
@@ -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);
drivers/gpu/drm/i915/display/intel_sdvo.c +1 -1
@@ -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;
drivers/gpu/drm/i915/display/vlv_dsi.c +1 -1
@@ -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 );
Signature · 1 line
2.34.1
Re: [PATCH v8 8/8] drm/i915/panel: move panel fixed EDID to struct intel_panel
Quoted 8 lines · Jani Nikula
It's a bit confusing to have two cached EDIDs in struct
intel_connectorwith slightly different purposes. Make the distinction a bit clearer by moving the EDID cached for eDP and LVDS panels at connector init time to structintel_panel, and name itfixed_edid. That's what it is, a fixed EDID for the panels.Cc Ville Syrjälä <[email protected]>Signed-off-by Jani Nikula <[email protected]>
Quoted 249 lines
--- 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(-)drivers/gpu/drm/i915/display/icl_dsi.c +1
-1@@ -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 );drivers/gpu/drm/i915/display/intel_connector.c +0
-3@@ -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);drivers/gpu/drm/i915/display/intel_display_types.h +4
-2@@ -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 */ drivers/gpu/drm/i915/display/intel_dp.c +10
-10@@ -4477,18 +4477,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@@ -5313,7 +5314,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);@@ -5340,7 +5340,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);drivers/gpu/drm/i915/display/intel_dvo.c +1
-1@@ -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 ); } }drivers/gpu/drm/i915/display/intel_lvds.c +5
-6@@ -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 );drivers/gpu/drm/i915/display/intel_panel.c +9
-1@@ -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);drivers/gpu/drm/i915/display/intel_panel.h +3
-1@@ -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);drivers/gpu/drm/i915/display/intel_sdvo.c +1
-1@@ -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;drivers/gpu/drm/i915/display/vlv_dsi.c +1
-1@@ -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 );Signature · 1 line
2.34.1
Signature · 2 lines
Ville Syrjälä Intel
Patchwork
CI[Intel-gfx] ✓ Fi.CI.BAT: success for drm/edid: info & modes parsing and drm_edid refactors (rev3)
In reply to Jani Nikula== Series Details ==
== Series Details ==
Series: drm/edid: info & modes parsing and drm_edid refactors (rev3)
URL : https://patchwork.freedesktop.org/series/112392/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_12613 -> Patchwork_112392v3
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/index.html
Participating hosts (38 -> 35)
------------------------------
Missing (3): fi-kbl-soraka fi-rkl-11600 fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_112392v3 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_gttfill@basic:
- fi-pnv-d510: [PASS][1] -> [FAIL][2] ([i915#7229])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-pnv-d510/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/fi-pnv-d510/igt@[email protected]
* igt@gem_lmem_swapping@basic:
- fi-apl-guc: NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#4613]) +3 similar issues
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/fi-apl-guc/igt@[email protected]
* igt@i915_selftest@live@gt_lrc:
- fi-rkl-guc: [PASS][4] -> [INCOMPLETE][5] ([i915#4983])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-rkl-guc/igt@i915_selftest@live@gt_lrc.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/fi-rkl-guc/igt@i915_selftest@live@gt_lrc.html
* igt@kms_chamelium_hpd@common-hpd-after-suspend:
- fi-apl-guc: NOTRUN -> [SKIP][6] ([fdo#109271]) +1 similar issue
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/fi-apl-guc/igt@[email protected]
#### Possible fixes ####
* igt@i915_selftest@live@hangcheck:
- fi-adl-ddr5: [DMESG-WARN][7] ([i915#5591]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-adl-ddr5/igt@i915_selftest@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/fi-adl-ddr5/igt@i915_selftest@[email protected]
* igt@i915_selftest@live@migrate:
- {bat-adlp-6}: [DMESG-FAIL][9] ([i915#7699]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/bat-adlp-6/igt@i915_selftest@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/bat-adlp-6/igt@i915_selftest@[email protected]
* 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_12613/bat-rpls-1/igt@i915_selftest@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/bat-rpls-1/igt@i915_selftest@[email protected]
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-dp-3:
- {bat-dg2-9}: [FAIL][13] -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/bat-dg2-9/igt@kms_pipe_crc_basic@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/bat-dg2-9/igt@kms_pipe_crc_basic@[email protected]
* igt@prime_self_import@basic-with_one_bo_two_files:
- fi-apl-guc: [DMESG-WARN][15] -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/fi-apl-guc/igt@prime_self_import@basic-with_one_bo_two_files.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/fi-apl-guc/igt@prime_self_import@basic-with_one_bo_two_files.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
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#4258]: https://gitlab.freedesktop.org/drm/intel/issues/4258
[i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
[i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
[i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
[i915#7229]: https://gitlab.freedesktop.org/drm/intel/issues/7229
[i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699
Build changes
-------------
* Linux: CI_DRM_12613 -> Patchwork_112392v3
CI-20190529: 20190529
CI_DRM_12613: c79a53a6143abdc789b46eb24cd7ce00924be491 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7126: 3aa9364a1e478010aba0d3dfe9183486560ecc60 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_112392v3: c79a53a6143abdc789b46eb24cd7ce00924be491 @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
a144c062bbba drm/i915/panel: move panel fixed EDID to struct intel_panel d029f6d99edc drm/i915/opregion: convert intel_opregion_get_edid() to struct drm_edid 5e0da94762e8 drm/i915/bios: convert intel_bios_init_panel() to drm_edid d923ff26c5a8 drm/i915/edid: convert DP, HDMI and LVDS to drm_edid 4d40761658a3 drm/edid: remove redundant _drm_connector_update_edid_property() 4cac85bdd7ae drm/edid: add separate drm_edid_connector_add_modes() fb4e4c23d9ed drm/edid: refactor _drm_edid_connector_update() and rename e98534344080 drm/edid: split HDMI VSDB info and mode parsing
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/index.html
Patchwork
CI[Intel-gfx] ✓ Fi.CI.IGT: success for drm/edid: info & modes parsing and drm_edid refactors (rev3)
In reply to Jani Nikula== Series Details ==
== Series Details ==
Series: drm/edid: info & modes parsing and drm_edid refactors (rev3)
URL : https://patchwork.freedesktop.org/series/112392/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_12613_full -> Patchwork_112392v3_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/index.html
Participating hosts (12 -> 10)
------------------------------
Missing (2): pig-skl-6260u pig-kbl-iris
Known issues
------------
Here are the changes found in Patchwork_112392v3_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_fair@basic-none@rcs0:
- shard-glk: [PASS][1] -> [FAIL][2] ([i915#2842])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk5/igt@gem_exec_fair@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-glk6/igt@gem_exec_fair@[email protected]
* igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions:
- shard-glk: [PASS][3] -> [FAIL][4] ([i915#2346])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk8/igt@kms_cursor_legacy@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-glk9/igt@kms_cursor_legacy@[email protected]
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2:
- shard-glk: [PASS][5] -> [FAIL][6] ([i915#79])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk1/igt@kms_flip@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-glk2/igt@kms_flip@[email protected]
#### Possible fixes ####
* igt@drm_fdinfo@most-busy-check-all@rcs0:
- {shard-rkl}: [FAIL][7] ([i915#7742]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@drm_fdinfo@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-4/igt@drm_fdinfo@[email protected]
* igt@feature_discovery@psr2:
- {shard-rkl}: [SKIP][9] ([i915#658]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-6/igt@[email protected]
* igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-glk: [FAIL][11] ([i915#2842]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk1/igt@gem_exec_fair@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-glk2/igt@gem_exec_fair@[email protected]
- {shard-tglu}: [FAIL][13] ([i915#2842]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-tglu-5/igt@gem_exec_fair@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-tglu-6/igt@gem_exec_fair@[email protected]
* igt@gem_exec_reloc@basic-wc:
- {shard-rkl}: [SKIP][15] ([i915#3281]) -> [PASS][16] +6 similar issues
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@[email protected]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-5/igt@[email protected]
* igt@gem_pread@self:
- {shard-rkl}: [SKIP][17] ([i915#3282]) -> [PASS][18]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@[email protected]
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-5/igt@[email protected]
* igt@gen9_exec_parse@bb-start-param:
- {shard-rkl}: [SKIP][19] ([i915#2527]) -> [PASS][20] +2 similar issues
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@[email protected]
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-5/igt@[email protected]
* igt@i915_pm_sseu@full-enable:
- {shard-rkl}: [SKIP][21] ([i915#4387]) -> [PASS][22]
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@[email protected]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-5/igt@[email protected]
* igt@i915_selftest@live@gt_heartbeat:
- shard-glk: [DMESG-FAIL][23] ([i915#5334]) -> [PASS][24]
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-glk2/igt@i915_selftest@live@gt_heartbeat.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-glk2/igt@i915_selftest@live@gt_heartbeat.html
* igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw:
- {shard-rkl}: [SKIP][25] ([i915#1849] / [i915#4098]) -> [PASS][26] +18 similar issues
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@[email protected]
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-6/igt@[email protected]
* igt@kms_psr@cursor_blt:
- {shard-rkl}: [SKIP][27] ([i915#1072]) -> [PASS][28] +1 similar issue
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@kms_psr@cursor_blt.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-6/igt@kms_psr@cursor_blt.html
* igt@kms_vblank@pipe-b-ts-continuation-idle:
- {shard-rkl}: [SKIP][29] ([i915#1845] / [i915#4098]) -> [PASS][30] +23 similar issues
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-3/igt@[email protected]
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-6/igt@[email protected]
* igt@perf@gen12-oa-tlb-invalidate:
- {shard-rkl}: [SKIP][31] ([fdo#109289]) -> [PASS][32]
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-5/igt@[email protected]
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-1/igt@[email protected]
* igt@prime_vgem@basic-fence-read:
- {shard-rkl}: [SKIP][33] ([fdo#109295] / [i915#3291] / [i915#3708]) -> [PASS][34]
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12613/shard-rkl-1/igt@[email protected]
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_112392v3/shard-rkl-5/igt@[email protected]
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
[fdo#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303
[fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307
[fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
[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#110542]: https://bugs.freedesktop.org/show_bug.cgi?id=110542
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
[fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
[fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
[fdo#111644]: https://bugs.freedesktop.org/show_bug.cgi?id=111644
[fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[fdo#112054]: https://bugs.freedesktop.org/show_bug.cgi?id=112054
[fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
[i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
[i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
[i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769
[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#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
[i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
[i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
[i915#2436]: https://gitlab.freedesktop.org/drm/intel/issues/2436
[i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
[i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
[i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
[i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
[i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#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#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#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
[i915#315]: https://gitlab.freedesktop.org/drm/intel/issues/315
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
[i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
[i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
[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#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#3825]: https://gitlab.freedesktop.org/drm/intel/issues/3825
[i915#3826]: https://gitlab.freedesktop.org/drm/intel/issues/3826
[i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
[i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
[i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
[i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#426]: https://gitlab.freedesktop.org/drm/intel/issues/426
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
[i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4387]: https://gitlab.freedesktop.org/drm/intel/issues/4387
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
[i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
[i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
[i915#4818]: https://gitlab.freedesktop.org/drm/intel/issues/4818
[i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
[i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
[i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
[i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
[i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[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#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
[i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
[i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
[i915#5327]: https://gitlab.freedesktop.org/drm/intel/issues/5327
[i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
[i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
[i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
[i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
[i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
[i915#5723]: https://gitlab.freedesktop.org/drm/intel/issues/5723
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6117]: https://gitlab.freedesktop.org/drm/intel/issues/6117
[i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
[i915#6245]: https://gitlab.freedesktop.org/drm/intel/issues/6245
[i915#6247]: https://gitlab.freedesktop.org/drm/intel/issues/6247
[i915#6248]: https://gitlab.freedesktop.org/drm/intel/issues/6248
[i915#6252]: https://gitlab.freedesktop.org/drm/intel/issues/6252
[i915#6259]: https://gitlab.freedesktop.org/drm/intel/issues/6259
[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#6344]: https://gitlab.freedesktop.org/drm/intel/issues/6344
[i915#6403]: https://gitlab.freedesktop.org/drm/intel/issues/6403
[i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
[i915#6463]: https://gitlab.freedesktop.org/drm/intel/issues/6463
[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#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
[i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
[i915#6946]: https://gitlab.freedesktop.org/drm/intel/issues/6946
[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#7651]: https://gitlab.freedesktop.org/drm/intel/issues/7651
[i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
[i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
[i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
[i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
Build changes
-------------
* Linux: CI_DRM_12613 -> Patchwork_112392v3
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_12613: c79a53a6143abdc789b46eb24cd7ce00924be491 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7126: 3aa9364a1e478010aba0d3dfe9183486560ecc60 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_112392v3: c79a53a6143abdc789b46eb24cd7ce00924be491 @ 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_112392v3/index.html