Message ID | 1360440222-21830-1-git-send-email-daniel.vetter@ffwll.ch (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, Feb 09, 2013 at 09:03:42PM +0100, Daniel Vetter wrote: > Some early bios versions seem to ship with the wrong tuning values for > the MCH, possible resulting in pipe underruns under load. Especially > on DP outputs this can lead to black screen, since DP really doesn't > like an occasional whack from an underrun. > > Unfortunately the registers seem to be locked after boot, so the only > thing we can do is politely point out issues and suggest a BIOS > upgrade. > > Arthur Runyan pointed us at this issue while discussion DP bugs - thus > far no confirmation from a bug report yet that it helps. But at least > some of my machines here have wrong values, so this might be useful in > understanding bug reports. > > v2: After a bit more discussion with Art and Ben we've decided to only > the check the watermark values, since the OREF ones could be be a > notch more aggressive on certain machines. > > Cc: Ben Widawsky <ben@bwidawsk.net> > Cc: Runyan, Arthur J <arthur.j.runyan@intel.com> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> I wouldn't mind if you printed the OREF values, even if you didn't use them to detect. But, Reviewed-by: Ben Widawsky <ben@bwidawsk.net> [snip]
On Sat, Feb 09, 2013 at 12:24:02PM -0800, Ben Widawsky wrote: > On Sat, Feb 09, 2013 at 09:03:42PM +0100, Daniel Vetter wrote: > > Some early bios versions seem to ship with the wrong tuning values for > > the MCH, possible resulting in pipe underruns under load. Especially > > on DP outputs this can lead to black screen, since DP really doesn't > > like an occasional whack from an underrun. > > > > Unfortunately the registers seem to be locked after boot, so the only > > thing we can do is politely point out issues and suggest a BIOS > > upgrade. > > > > Arthur Runyan pointed us at this issue while discussion DP bugs - thus > > far no confirmation from a bug report yet that it helps. But at least > > some of my machines here have wrong values, so this might be useful in > > understanding bug reports. > > > > v2: After a bit more discussion with Art and Ben we've decided to only > > the check the watermark values, since the OREF ones could be be a > > notch more aggressive on certain machines. > > > > Cc: Ben Widawsky <ben@bwidawsk.net> > > Cc: Runyan, Arthur J <arthur.j.runyan@intel.com> > > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> > > I wouldn't mind if you printed the OREF values, even if you didn't use > them to detect. They're different already on my machine than the most conservative recommended values, so I've thought it'll be of little value to us. If the hw guys need them, we can always ask reporters for it. > But, > Reviewed-by: Ben Widawsky <ben@bwidawsk.net> Thanks for the review, patch merged. -Daniel
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 8754f91..961e2da 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -1235,6 +1235,10 @@ #define MAD_DIMM_A_SIZE_SHIFT 0 #define MAD_DIMM_A_SIZE_MASK (0xff << MAD_DIMM_A_SIZE_SHIFT) +/** snb MCH registers for priority tuning */ +#define MCH_SSKPD (MCHBAR_MIRROR_BASE_SNB + 0x5d10) +#define MCH_SSKPD_WM0_MASK 0x3f +#define MCH_SSKPD_WM0_VAL 0xc /* Clocking configuration register */ #define CLKCFG 0x10c00 diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 7c9a6d1..3bcc745 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -3584,6 +3584,19 @@ static void cpt_init_clock_gating(struct drm_device *dev) } } +static void gen6_check_mch_setup(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + uint32_t tmp; + + tmp = I915_READ(MCH_SSKPD); + if ((tmp & MCH_SSKPD_WM0_MASK) != MCH_SSKPD_WM0_VAL) { + DRM_INFO("Wrong MCH_SSKPD value: 0x%08x\n", tmp); + DRM_INFO("This can cause pipe underruns and display issues.\n"); + DRM_INFO("Please upgrade your BIOS to fix this.\n"); + } +} + static void gen6_init_clock_gating(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; @@ -3676,6 +3689,8 @@ static void gen6_init_clock_gating(struct drm_device *dev) I915_WRITE(GEN6_GT_MODE, _MASKED_BIT_ENABLE(GEN6_GT_MODE_HI)); cpt_init_clock_gating(dev); + + gen6_check_mch_setup(dev); } static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv) @@ -3861,6 +3876,8 @@ static void ivybridge_init_clock_gating(struct drm_device *dev) I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr); cpt_init_clock_gating(dev); + + gen6_check_mch_setup(dev); } static void valleyview_init_clock_gating(struct drm_device *dev)
Some early bios versions seem to ship with the wrong tuning values for the MCH, possible resulting in pipe underruns under load. Especially on DP outputs this can lead to black screen, since DP really doesn't like an occasional whack from an underrun. Unfortunately the registers seem to be locked after boot, so the only thing we can do is politely point out issues and suggest a BIOS upgrade. Arthur Runyan pointed us at this issue while discussion DP bugs - thus far no confirmation from a bug report yet that it helps. But at least some of my machines here have wrong values, so this might be useful in understanding bug reports. v2: After a bit more discussion with Art and Ben we've decided to only the check the watermark values, since the OREF ones could be be a notch more aggressive on certain machines. Cc: Ben Widawsky <ben@bwidawsk.net> Cc: Runyan, Arthur J <arthur.j.runyan@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> --- drivers/gpu/drm/i915/i915_reg.h | 4 ++++ drivers/gpu/drm/i915/intel_pm.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+)