Type 1 HDMI may be version 1.3 or upper, which supports higher max TMDS clock for higher resolutions, like 3840x2160. This patch sets max TMDS clock according to the chip, if the adapter is type 1 HDMI.
Buglink: https://bugs.freedesktop.org/show_bug.cgi?id=112018 Fixes: b1ba124d8e95 ("drm/i915: Respect DP++ adaptor TMDS clock limit") Signed-off-by: Jian-Hong Pan jian-hong@endlessm.com --- drivers/gpu/drm/i915/display/intel_hdmi.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index e02f0faecf02..74e4426ffcad 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -2454,6 +2454,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) { struct drm_i915_private *dev_priv = to_i915(connector->dev); struct intel_hdmi *hdmi = intel_attached_hdmi(connector); + struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base; enum port port = hdmi_to_dig_port(hdmi)->base.port; struct i2c_adapter *adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); @@ -2488,8 +2489,16 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) return;
hdmi->dp_dual_mode.type = type; - hdmi->dp_dual_mode.max_tmds_clock = - drm_dp_dual_mode_max_tmds_clock(type, adapter); + /* Type 1 HDMI may be version 1.3 or upper, which supports higher max + * TMDS clock for higher resolutions, like 3840x2160. So, set it + * according to the chip, if the adapter is type 1 HDMI. + */ + if (type == DRM_DP_DUAL_MODE_TYPE1_HDMI) + hdmi->dp_dual_mode.max_tmds_clock = + intel_hdmi_source_max_tmds_clock(encoder); + else + hdmi->dp_dual_mode.max_tmds_clock = + drm_dp_dual_mode_max_tmds_clock(type, adapter);
DRM_DEBUG_KMS("DP dual mode adaptor (%s) detected (max TMDS clock: %d kHz)\n", drm_dp_get_dual_mode_type_name(type),
On Wed, Oct 16, 2019 at 05:57:58PM +0800, Jian-Hong Pan wrote:
Type 1 HDMI may be version 1.3 or upper, which supports higher max TMDS clock for higher resolutions,
Spec says "Type 1 adaptors can support DVI or HDMI up to a 165MHz TMDS clock rate."
And I've definitely seen HDMI dongles that can't deal with eg. 1080p 12bpc @225MHz. We don't want users with black screens out of the box, so NAK.
If you want to "overclock" your hardware you can do so by setting up the modeline manually.
like 3840x2160. This patch sets max TMDS clock according to the chip, if the adapter is type 1 HDMI.
Buglink: https://bugs.freedesktop.org/show_bug.cgi?id=112018 Fixes: b1ba124d8e95 ("drm/i915: Respect DP++ adaptor TMDS clock limit") Signed-off-by: Jian-Hong Pan jian-hong@endlessm.com
drivers/gpu/drm/i915/display/intel_hdmi.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index e02f0faecf02..74e4426ffcad 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -2454,6 +2454,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) { struct drm_i915_private *dev_priv = to_i915(connector->dev); struct intel_hdmi *hdmi = intel_attached_hdmi(connector);
- struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base; enum port port = hdmi_to_dig_port(hdmi)->base.port; struct i2c_adapter *adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
@@ -2488,8 +2489,16 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) return;
hdmi->dp_dual_mode.type = type;
- hdmi->dp_dual_mode.max_tmds_clock =
drm_dp_dual_mode_max_tmds_clock(type, adapter);
/* Type 1 HDMI may be version 1.3 or upper, which supports higher max
* TMDS clock for higher resolutions, like 3840x2160. So, set it
* according to the chip, if the adapter is type 1 HDMI.
*/
if (type == DRM_DP_DUAL_MODE_TYPE1_HDMI)
hdmi->dp_dual_mode.max_tmds_clock =
intel_hdmi_source_max_tmds_clock(encoder);
else
hdmi->dp_dual_mode.max_tmds_clock =
drm_dp_dual_mode_max_tmds_clock(type, adapter);
DRM_DEBUG_KMS("DP dual mode adaptor (%s) detected (max TMDS clock: %d kHz)\n", drm_dp_get_dual_mode_type_name(type),
-- 2.23.0
dri-devel@lists.freedesktop.org