diff options
author | Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> | 2018-03-06 15:33:55 -0500 |
---|---|---|
committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2018-03-06 17:35:45 -0500 |
commit | c90c275c6ff4b7eca4221a302b399499239ae89e (patch) | |
tree | ca1a372350bfaf13edaddc3d726dc745a6ec684b | |
parent | f41d19beccfebb84abc729e2d8ece0c368b2152f (diff) |
drm/i915/psr: Update PSR2 resolution check for Cannonlake
In fact, apply the Cannonlake resolution check for all >= Gen-10 platforms
to be safe.
v3: Update GLK too. (Ville)
Longer variable names.
if-else in place of ternary operator.
v2: Use local variables for resolution limits and print them (Ville)
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Elio Martinez Monroy <elio.martinez.monroy@intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180306203355.29292-1-dhinakaran.pandiyan@intel.com
-rw-r--r-- | drivers/gpu/drm/i915/intel_psr.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c index 05770790a4e9..23175c5c4a50 100644 --- a/drivers/gpu/drm/i915/intel_psr.c +++ b/drivers/gpu/drm/i915/intel_psr.c | |||
@@ -451,8 +451,9 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp, | |||
451 | { | 451 | { |
452 | struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); | 452 | struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); |
453 | struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev); | 453 | struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev); |
454 | const struct drm_display_mode *adjusted_mode = | 454 | int crtc_hdisplay = crtc_state->base.adjusted_mode.crtc_hdisplay; |
455 | &crtc_state->base.adjusted_mode; | 455 | int crtc_vdisplay = crtc_state->base.adjusted_mode.crtc_vdisplay; |
456 | int psr_max_h = 0, psr_max_v = 0; | ||
456 | 457 | ||
457 | /* | 458 | /* |
458 | * FIXME psr2_support is messed up. It's both computed | 459 | * FIXME psr2_support is messed up. It's both computed |
@@ -462,10 +463,18 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp, | |||
462 | if (!dev_priv->psr.psr2_support) | 463 | if (!dev_priv->psr.psr2_support) |
463 | return false; | 464 | return false; |
464 | 465 | ||
465 | /* PSR2 is restricted to work with panel resolutions up to 3640x2304 */ | 466 | if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) { |
466 | if (adjusted_mode->crtc_hdisplay > 3640 || | 467 | psr_max_h = 4096; |
467 | adjusted_mode->crtc_vdisplay > 2304) { | 468 | psr_max_v = 2304; |
468 | DRM_DEBUG_KMS("PSR2 not enabled, panel resolution too big\n"); | 469 | } else if (IS_GEN9(dev_priv)) { |
470 | psr_max_h = 3640; | ||
471 | psr_max_v = 2304; | ||
472 | } | ||
473 | |||
474 | if (crtc_hdisplay > psr_max_h || crtc_vdisplay > psr_max_v) { | ||
475 | DRM_DEBUG_KMS("PSR2 not enabled, resolution %dx%d > max supported %dx%d\n", | ||
476 | crtc_hdisplay, crtc_vdisplay, | ||
477 | psr_max_h, psr_max_v); | ||
469 | return false; | 478 | return false; |
470 | } | 479 | } |
471 | 480 | ||