aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 00fbff5ddd81..f851db7be2cc 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4680,8 +4680,17 @@ sandybridge_compute_sprite_srwm(struct drm_device *dev, int plane,
4680 4680
4681 crtc = intel_get_crtc_for_plane(dev, plane); 4681 crtc = intel_get_crtc_for_plane(dev, plane);
4682 clock = crtc->mode.clock; 4682 clock = crtc->mode.clock;
4683 if (!clock) {
4684 *sprite_wm = 0;
4685 return false;
4686 }
4683 4687
4684 line_time_us = (sprite_width * 1000) / clock; 4688 line_time_us = (sprite_width * 1000) / clock;
4689 if (!line_time_us) {
4690 *sprite_wm = 0;
4691 return false;
4692 }
4693
4685 line_count = (latency_ns / line_time_us + 1000) / 1000; 4694 line_count = (latency_ns / line_time_us + 1000) / 1000;
4686 line_size = sprite_width * pixel_size; 4695 line_size = sprite_width * pixel_size;
4687 4696
@@ -6175,7 +6184,7 @@ void intel_crtc_load_lut(struct drm_crtc *crtc)
6175 int i; 6184 int i;
6176 6185
6177 /* The clocks have to be on to load the palette. */ 6186 /* The clocks have to be on to load the palette. */
6178 if (!crtc->enabled) 6187 if (!crtc->enabled || !intel_crtc->active)
6179 return; 6188 return;
6180 6189
6181 /* use legacy palette for Ironlake */ 6190 /* use legacy palette for Ironlake */
@@ -6561,7 +6570,7 @@ intel_framebuffer_create_for_mode(struct drm_device *dev,
6561 mode_cmd.height = mode->vdisplay; 6570 mode_cmd.height = mode->vdisplay;
6562 mode_cmd.pitches[0] = intel_framebuffer_pitch_for_width(mode_cmd.width, 6571 mode_cmd.pitches[0] = intel_framebuffer_pitch_for_width(mode_cmd.width,
6563 bpp); 6572 bpp);
6564 mode_cmd.pixel_format = 0; 6573 mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
6565 6574
6566 return intel_framebuffer_create(dev, &mode_cmd, obj); 6575 return intel_framebuffer_create(dev, &mode_cmd, obj);
6567} 6576}
@@ -8184,8 +8193,8 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
8184 I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */ 8193 I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */
8185 8194
8186 if (intel_enable_rc6(dev_priv->dev)) 8195 if (intel_enable_rc6(dev_priv->dev))
8187 rc6_mask = GEN6_RC_CTL_RC6p_ENABLE | 8196 rc6_mask = GEN6_RC_CTL_RC6_ENABLE |
8188 GEN6_RC_CTL_RC6_ENABLE; 8197 ((IS_GEN7(dev_priv->dev)) ? GEN6_RC_CTL_RC6p_ENABLE : 0);
8189 8198
8190 I915_WRITE(GEN6_RC_CONTROL, 8199 I915_WRITE(GEN6_RC_CONTROL,
8191 rc6_mask | 8200 rc6_mask |
@@ -8463,12 +8472,32 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
8463 I915_WRITE(WM2_LP_ILK, 0); 8472 I915_WRITE(WM2_LP_ILK, 0);
8464 I915_WRITE(WM1_LP_ILK, 0); 8473 I915_WRITE(WM1_LP_ILK, 0);
8465 8474
8475 /* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
8476 * This implements the WaDisableRCZUnitClockGating workaround.
8477 */
8478 I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
8479
8466 I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE); 8480 I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
8467 8481
8468 I915_WRITE(IVB_CHICKEN3, 8482 I915_WRITE(IVB_CHICKEN3,
8469 CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE | 8483 CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
8470 CHICKEN3_DGMG_DONE_FIX_DISABLE); 8484 CHICKEN3_DGMG_DONE_FIX_DISABLE);
8471 8485
8486 /* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */
8487 I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
8488 GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
8489
8490 /* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */
8491 I915_WRITE(GEN7_L3CNTLREG1,
8492 GEN7_WA_FOR_GEN7_L3_CONTROL);
8493 I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
8494 GEN7_WA_L3_CHICKEN_MODE);
8495
8496 /* This is required by WaCatErrorRejectionIssue */
8497 I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
8498 I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
8499 GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
8500
8472 for_each_pipe(pipe) { 8501 for_each_pipe(pipe) {
8473 I915_WRITE(DSPCNTR(pipe), 8502 I915_WRITE(DSPCNTR(pipe),
8474 I915_READ(DSPCNTR(pipe)) | 8503 I915_READ(DSPCNTR(pipe)) |