diff options
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d01a800f8a36..91631bf354e6 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -4143,6 +4143,7 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc, | |||
4143 | struct drm_device *dev = crtc->base.dev; | 4143 | struct drm_device *dev = crtc->base.dev; |
4144 | struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode; | 4144 | struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode; |
4145 | 4145 | ||
4146 | /* FIXME should check pixel clock limits on all platforms */ | ||
4146 | if (INTEL_INFO(dev)->gen < 4) { | 4147 | if (INTEL_INFO(dev)->gen < 4) { |
4147 | struct drm_i915_private *dev_priv = dev->dev_private; | 4148 | struct drm_i915_private *dev_priv = dev->dev_private; |
4148 | int clock_limit = | 4149 | int clock_limit = |
@@ -4156,8 +4157,13 @@ static int intel_crtc_compute_config(struct intel_crtc *crtc, | |||
4156 | * the only reason for the pipe == PIPE_A check? | 4157 | * the only reason for the pipe == PIPE_A check? |
4157 | */ | 4158 | */ |
4158 | if (crtc->pipe == PIPE_A && | 4159 | if (crtc->pipe == PIPE_A && |
4159 | adjusted_mode->clock > clock_limit * 9 / 10) | 4160 | adjusted_mode->clock > clock_limit * 9 / 10) { |
4161 | clock_limit *= 2; | ||
4160 | pipe_config->double_wide = true; | 4162 | pipe_config->double_wide = true; |
4163 | } | ||
4164 | |||
4165 | if (adjusted_mode->clock > clock_limit * 9 / 10) | ||
4166 | return -EINVAL; | ||
4161 | } | 4167 | } |
4162 | 4168 | ||
4163 | /* Cantiga+ cannot handle modes with a hsync front porch of 0. | 4169 | /* Cantiga+ cannot handle modes with a hsync front porch of 0. |