| From 177a0ab7aa7203fd5e5c4db111b7cda654d3c414 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> |
| Date: Fri, 5 Jul 2013 11:57:22 +0300 |
| Subject: drm/i915: Don't multiply the watermark latency values too early |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| The LP1+ watermark latency values need to be multiplied by 5 to |
| make them suitable for watermark calculations. However on pre-HSW |
| platforms we're going to need the raw value later when we have to |
| write it to the WM_LPn registers' latency field. So delay the |
| multiplication until it's needed. |
| |
| Note: Paulo complains that the units of wm (now in 100ns) aren't |
| really clear and I agree. But that can be fixed later on ... |
| |
| Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> |
| [danvet: Add a comment about the unit obfuscation.] |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| |
| (cherry picked from commit e5d5019e95415a99b1c0bca3dab6d8fcd39f4c65) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_pm.c | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c |
| index aa7dd82d4489..c2b993fe82ca 100644 |
| --- a/drivers/gpu/drm/i915/intel_pm.c |
| +++ b/drivers/gpu/drm/i915/intel_pm.c |
| @@ -2361,10 +2361,10 @@ static void intel_read_wm_latency(struct drm_device *dev, uint16_t wm[5]) |
| wm[0] = (sskpd >> 56) & 0xFF; |
| if (wm[0] == 0) |
| wm[0] = sskpd & 0xF; |
| - wm[1] = ((sskpd >> 4) & 0xFF) * 5; |
| - wm[2] = ((sskpd >> 12) & 0xFF) * 5; |
| - wm[3] = ((sskpd >> 20) & 0x1FF) * 5; |
| - wm[4] = ((sskpd >> 32) & 0x1FF) * 5; |
| + wm[1] = (sskpd >> 4) & 0xFF; |
| + wm[2] = (sskpd >> 12) & 0xFF; |
| + wm[3] = (sskpd >> 20) & 0x1FF; |
| + wm[4] = (sskpd >> 32) & 0x1FF; |
| } |
| } |
| |
| @@ -2442,7 +2442,7 @@ static void hsw_compute_wm_results(struct drm_device *dev, |
| int level, max_level, wm_lp; |
| |
| for (level = 1; level <= 4; level++) |
| - if (!hsw_compute_lp_wm(wm[level], lp_maximums, params, |
| + if (!hsw_compute_lp_wm(wm[level] * 5, lp_maximums, params, |
| &lp_results[level - 1])) |
| break; |
| max_level = level - 1; |
| -- |
| 1.8.5.rc3 |
| |