drm/i915: Disable DRRS on IVB/HSW port != A
[ Upstream commitee59792c97
] Currently we allow DRRS on IVB PCH ports, but we're missing a few programming steps meaning it is guaranteed to not work. And on HSW DRRS is not supported on anything but port A ever as only transcoder EDP has the M2/N2 registers (though I'm not sure if HSW ever has eDP on any other port). Starting from BDW all transcoders have the dynamically reprogrammable M/N registers so DRRS could work on any port. Stop initializing DRRS on ports where it cannot possibly work. Cc: stable@vger.kernel.org Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220128103757.22461-11-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com> (cherry picked from commitf0d4ce59f4
) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e2b3d1bf6e
commit
5c66161cce
@ -445,6 +445,7 @@ intel_dp_drrs_init(struct intel_connector *connector,
|
|||||||
struct drm_display_mode *fixed_mode)
|
struct drm_display_mode *fixed_mode)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
|
struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
|
||||||
|
struct intel_encoder *encoder = connector->encoder;
|
||||||
struct drm_display_mode *downclock_mode = NULL;
|
struct drm_display_mode *downclock_mode = NULL;
|
||||||
|
|
||||||
INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
|
INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
|
||||||
@ -456,6 +457,13 @@ intel_dp_drrs_init(struct intel_connector *connector,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((DISPLAY_VER(dev_priv) < 8 && !HAS_GMCH(dev_priv)) &&
|
||||||
|
encoder->port != PORT_A) {
|
||||||
|
drm_dbg_kms(&dev_priv->drm,
|
||||||
|
"DRRS only supported on eDP port A\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (dev_priv->vbt.drrs_type != SEAMLESS_DRRS_SUPPORT) {
|
if (dev_priv->vbt.drrs_type != SEAMLESS_DRRS_SUPPORT) {
|
||||||
drm_dbg_kms(&dev_priv->drm, "VBT doesn't support DRRS\n");
|
drm_dbg_kms(&dev_priv->drm, "VBT doesn't support DRRS\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Reference in New Issue
Block a user