diff options
author | Eugeni Dodonov <eugeni.dodonov@intel.com> | 2012-07-02 10:51:09 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-07-05 03:56:03 -0400 |
commit | cad2a2d7761238c0b9ff62eecc89215e6bd61831 (patch) | |
tree | f23708b2289dc9e6dbe0e68e36ec81c8756db33f | |
parent | 885094845067dd3791b0f6c3497d51bca76e393a (diff) |
drm/i915: introduce haswell_init_clock_gating
This is based on Ivy Bridge clock gating for now, but is subject to
changes in the future.
Note: Compared to the ivb clock gating this drops the the IDICOS
medium uncore sharing tuned in
commit 208482232de3590cee4757dfabe5d8cee8c6e626
Author: Ben Widawsky <ben@bwidawsk.net>
Date: Fri May 4 18:58:59 2012 -0700
drm/i915: set IDICOS to medium uncore resources
Eugeni wants to benchmark the effect of this first.
Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
[danvet: added note]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index c06785ed3f43..3c2724e42975 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -3417,6 +3417,58 @@ static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv) | |||
3417 | I915_WRITE(GEN7_FF_THREAD_MODE, reg); | 3417 | I915_WRITE(GEN7_FF_THREAD_MODE, reg); |
3418 | } | 3418 | } |
3419 | 3419 | ||
3420 | static void haswell_init_clock_gating(struct drm_device *dev) | ||
3421 | { | ||
3422 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
3423 | int pipe; | ||
3424 | uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE; | ||
3425 | |||
3426 | I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate); | ||
3427 | |||
3428 | I915_WRITE(WM3_LP_ILK, 0); | ||
3429 | I915_WRITE(WM2_LP_ILK, 0); | ||
3430 | I915_WRITE(WM1_LP_ILK, 0); | ||
3431 | |||
3432 | /* According to the spec, bit 13 (RCZUNIT) must be set on IVB. | ||
3433 | * This implements the WaDisableRCZUnitClockGating workaround. | ||
3434 | */ | ||
3435 | I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE); | ||
3436 | |||
3437 | I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE); | ||
3438 | |||
3439 | I915_WRITE(IVB_CHICKEN3, | ||
3440 | CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE | | ||
3441 | CHICKEN3_DGMG_DONE_FIX_DISABLE); | ||
3442 | |||
3443 | /* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */ | ||
3444 | I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1, | ||
3445 | GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC); | ||
3446 | |||
3447 | /* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */ | ||
3448 | I915_WRITE(GEN7_L3CNTLREG1, | ||
3449 | GEN7_WA_FOR_GEN7_L3_CONTROL); | ||
3450 | I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER, | ||
3451 | GEN7_WA_L3_CHICKEN_MODE); | ||
3452 | |||
3453 | /* This is required by WaCatErrorRejectionIssue */ | ||
3454 | I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG, | ||
3455 | I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) | | ||
3456 | GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB); | ||
3457 | |||
3458 | for_each_pipe(pipe) { | ||
3459 | I915_WRITE(DSPCNTR(pipe), | ||
3460 | I915_READ(DSPCNTR(pipe)) | | ||
3461 | DISPPLANE_TRICKLE_FEED_DISABLE); | ||
3462 | intel_flush_display_plane(dev_priv, pipe); | ||
3463 | } | ||
3464 | |||
3465 | gen7_setup_fixed_func_scheduler(dev_priv); | ||
3466 | |||
3467 | /* WaDisable4x2SubspanOptimization */ | ||
3468 | I915_WRITE(CACHE_MODE_1, | ||
3469 | _MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE)); | ||
3470 | } | ||
3471 | |||
3420 | static void ivybridge_init_clock_gating(struct drm_device *dev) | 3472 | static void ivybridge_init_clock_gating(struct drm_device *dev) |
3421 | { | 3473 | { |
3422 | struct drm_i915_private *dev_priv = dev->dev_private; | 3474 | struct drm_i915_private *dev_priv = dev->dev_private; |
@@ -3826,7 +3878,7 @@ void intel_init_pm(struct drm_device *dev) | |||
3826 | "Disable CxSR\n"); | 3878 | "Disable CxSR\n"); |
3827 | dev_priv->display.update_wm = NULL; | 3879 | dev_priv->display.update_wm = NULL; |
3828 | } | 3880 | } |
3829 | dev_priv->display.init_clock_gating = ivybridge_init_clock_gating; | 3881 | dev_priv->display.init_clock_gating = haswell_init_clock_gating; |
3830 | dev_priv->display.sanitize_pm = gen6_sanitize_pm; | 3882 | dev_priv->display.sanitize_pm = gen6_sanitize_pm; |
3831 | } else | 3883 | } else |
3832 | dev_priv->display.update_wm = NULL; | 3884 | dev_priv->display.update_wm = NULL; |