diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-12-14 17:38:29 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-12-17 11:22:25 -0500 |
commit | 6547fbdbfff62c99e4f7b4f985ff8b3454f33b0f (patch) | |
tree | 4a0897646ca0f0675b804611f38f9a81dfc4cc92 /drivers/gpu | |
parent | 4283908ef7f11a72c3b80dd4cf026f1a86429f82 (diff) |
drm/i915: Implement WaSetupGtModeTdRowDispatch
I'm not really sure, since the w/a entry is as thin on details as
ever, and Bspec doesn't say anything about it. But I've figured only
dispatching to rows 0&1 instead of all four should be the right thing
for GT1.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
[danvet: Add the missing snb server GT1 to the check, spotted by Chris
Wilson.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 5 |
3 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 557843dd4b2..062a60b381b 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -1166,6 +1166,9 @@ struct drm_i915_file_private { | |||
1166 | #define IS_IVB_GT1(dev) ((dev)->pci_device == 0x0156 || \ | 1166 | #define IS_IVB_GT1(dev) ((dev)->pci_device == 0x0156 || \ |
1167 | (dev)->pci_device == 0x0152 || \ | 1167 | (dev)->pci_device == 0x0152 || \ |
1168 | (dev)->pci_device == 0x015a) | 1168 | (dev)->pci_device == 0x015a) |
1169 | #define IS_SNB_GT1(dev) ((dev)->pci_device == 0x0102 || \ | ||
1170 | (dev)->pci_device == 0x0106 || \ | ||
1171 | (dev)->pci_device == 0x010A) | ||
1169 | #define IS_VALLEYVIEW(dev) (INTEL_INFO(dev)->is_valleyview) | 1172 | #define IS_VALLEYVIEW(dev) (INTEL_INFO(dev)->is_valleyview) |
1170 | #define IS_HASWELL(dev) (INTEL_INFO(dev)->is_haswell) | 1173 | #define IS_HASWELL(dev) (INTEL_INFO(dev)->is_haswell) |
1171 | #define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile) | 1174 | #define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile) |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index e0019378f8b..186ee5c85b5 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -533,7 +533,8 @@ | |||
533 | # define MI_FLUSH_ENABLE (1 << 12) | 533 | # define MI_FLUSH_ENABLE (1 << 12) |
534 | 534 | ||
535 | #define GEN6_GT_MODE 0x20d0 | 535 | #define GEN6_GT_MODE 0x20d0 |
536 | #define GEN6_GT_MODE_HI (1 << 9) | 536 | #define GEN6_GT_MODE_HI (1 << 9) |
537 | #define GEN6_TD_FOUR_ROW_DISPATCH_DISABLE (1 << 5) | ||
537 | 538 | ||
538 | #define GFX_MODE 0x02520 | 539 | #define GFX_MODE 0x02520 |
539 | #define GFX_MODE_GEN7 0x0229c | 540 | #define GFX_MODE_GEN7 0x0229c |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 3b85660ce4e..55f7a896a12 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -3596,6 +3596,11 @@ static void gen6_init_clock_gating(struct drm_device *dev) | |||
3596 | I915_WRITE(_3D_CHICKEN, | 3596 | I915_WRITE(_3D_CHICKEN, |
3597 | _MASKED_BIT_ENABLE(_3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB)); | 3597 | _MASKED_BIT_ENABLE(_3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB)); |
3598 | 3598 | ||
3599 | /* WaSetupGtModeTdRowDispatch */ | ||
3600 | if (IS_SNB_GT1(dev)) | ||
3601 | I915_WRITE(GEN6_GT_MODE, | ||
3602 | _MASKED_BIT_ENABLE(GEN6_TD_FOUR_ROW_DISPATCH_DISABLE)); | ||
3603 | |||
3599 | I915_WRITE(WM3_LP_ILK, 0); | 3604 | I915_WRITE(WM3_LP_ILK, 0); |
3600 | I915_WRITE(WM2_LP_ILK, 0); | 3605 | I915_WRITE(WM2_LP_ILK, 0); |
3601 | I915_WRITE(WM1_LP_ILK, 0); | 3606 | I915_WRITE(WM1_LP_ILK, 0); |