diff options
| author | Eugeni Dodonov <eugeni.dodonov@intel.com> | 2012-02-08 15:53:50 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-03-12 13:32:58 -0400 |
| commit | 8d5124c4081c166e6b74a6b98c635a3279af0c91 (patch) | |
| tree | ad5874d35a97077c580cc4239c5bf83088d86be2 /drivers/gpu/drm | |
| parent | f7f7943d1a0a34c2b8b93388daaa50571eade5e7 (diff) | |
drm/i915: gen7: Implement an L3 caching workaround.
commit e4e0c058a19c41150d12ad2d3023b3cf09c5de67 upstream.
This adds two cache-related workarounds for Ivy Bridge which can lead to
3D ring hangs and corruptions.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41353
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44610
Tested-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/gpu/drm')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 6 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 95b24e43500..73e4a343735 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
| @@ -2847,6 +2847,13 @@ | |||
| 2847 | #define DISP_TILE_SURFACE_SWIZZLING (1<<13) | 2847 | #define DISP_TILE_SURFACE_SWIZZLING (1<<13) |
| 2848 | #define DISP_FBC_WM_DIS (1<<15) | 2848 | #define DISP_FBC_WM_DIS (1<<15) |
| 2849 | 2849 | ||
| 2850 | /* GEN7 chicken */ | ||
| 2851 | #define GEN7_L3CNTLREG1 0xB01C | ||
| 2852 | #define GEN7_WA_FOR_GEN7_L3_CONTROL 0x3C4FFF8C | ||
| 2853 | |||
| 2854 | #define GEN7_L3_CHICKEN_MODE_REGISTER 0xB030 | ||
| 2855 | #define GEN7_WA_L3_CHICKEN_MODE 0x20000000 | ||
| 2856 | |||
| 2850 | /* PCH */ | 2857 | /* PCH */ |
| 2851 | 2858 | ||
| 2852 | /* south display engine interrupt */ | 2859 | /* south display engine interrupt */ |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index f7627759875..8e717c744bb 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -7464,6 +7464,12 @@ static void ivybridge_init_clock_gating(struct drm_device *dev) | |||
| 7464 | 7464 | ||
| 7465 | I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE); | 7465 | I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE); |
| 7466 | 7466 | ||
| 7467 | /* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */ | ||
| 7468 | I915_WRITE(GEN7_L3CNTLREG1, | ||
| 7469 | GEN7_WA_FOR_GEN7_L3_CONTROL); | ||
| 7470 | I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER, | ||
| 7471 | GEN7_WA_L3_CHICKEN_MODE); | ||
| 7472 | |||
| 7467 | for_each_pipe(pipe) | 7473 | for_each_pipe(pipe) |
| 7468 | I915_WRITE(DSPCNTR(pipe), | 7474 | I915_WRITE(DSPCNTR(pipe), |
| 7469 | I915_READ(DSPCNTR(pipe)) | | 7475 | I915_READ(DSPCNTR(pipe)) | |
