For certain eDP 1.4 panels, we need to use max lane count for the link training to succeed. This patch adds a EDID quirk for such eDP panels using their vendor ID and product ID to force using max lane count in the driver. Cc: Clint Taylor <Clinton.A.Taylor@xxxxxxxxx> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Tested-by: Albert Astals Cid <aacid@xxxxxxx> Tested-by: Emanuele Panigati <ilpanich@xxxxxxxxx> Tested-by: Ralgor <ralgorfdb@xxxxxxxxxxxxx> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109959 Signed-off-by: Manasi Navare <manasi.d.navare@xxxxxxxxx> --- drivers/gpu/drm/drm_edid.c | 10 ++++++++++ include/drm/drm_connector.h | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 2c22ea446075..fbc661806484 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -82,6 +82,8 @@ #define EDID_QUIRK_FORCE_10BPC (1 << 11) /* Non desktop display (i.e. HMD) */ #define EDID_QUIRK_NON_DESKTOP (1 << 12) +/* Force max lane count */ +#define EDID_QUIRK_FORCE_MAX_LANE_COUNT (1 << 13) struct detailed_mode_closure { struct drm_connector *connector; @@ -189,6 +191,10 @@ static const struct edid_quirk { /* OSVR HDK and HDK2 VR Headsets */ { "SVR", 0x1019, EDID_QUIRK_NON_DESKTOP }, + + /* SHP eDP 1.4 panel only works with max lane count */ + { "SHP", 0x149a, EDID_QUIRK_FORCE_MAX_LANE_COUNT }, + { "SHP", 0x148e, EDID_QUIRK_FORCE_MAX_LANE_COUNT }, }; /* @@ -4463,6 +4469,7 @@ drm_reset_display_info(struct drm_connector *connector) memset(&info->hdmi, 0, sizeof(info->hdmi)); info->non_desktop = 0; + info->force_max_lane_count = 0; } u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid) @@ -4744,6 +4751,9 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) if (quirks & EDID_QUIRK_FORCE_12BPC) connector->display_info.bpc = 12; + if (quirks & EDID_QUIRK_FORCE_MAX_LANE_COUNT) + connector->display_info.force_max_lane_count = true; + return num_modes; } EXPORT_SYMBOL(drm_add_edid_modes); diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 02a131202add..45436d40ffe3 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -457,6 +457,11 @@ struct drm_display_info { * @non_desktop: Non desktop display (HMD). */ bool non_desktop; + + /** + * @force_max_lane_count: Link training requires max lane count to pass + */ + bool force_max_lane_count; }; int drm_display_info_set_bus_formats(struct drm_display_info *info, -- 2.19.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx