diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2013-07-05 04:57:22 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-08-05 13:04:00 -0400 |
commit | e5d5019e95415a99b1c0bca3dab6d8fcd39f4c65 (patch) | |
tree | 27a6f5a4a7afd234b0c986e918e76e6edad43f73 /drivers/gpu/drm/i915/intel_pm.c | |
parent | 12b134df4e42ea1ac141388e563346777f8a1605 (diff) |
drm/i915: Don't multiply the watermark latency values too early
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>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index b8ec1433531d..b6430bacc7dc 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]) | |||
2361 | wm[0] = (sskpd >> 56) & 0xFF; | 2361 | wm[0] = (sskpd >> 56) & 0xFF; |
2362 | if (wm[0] == 0) | 2362 | if (wm[0] == 0) |
2363 | wm[0] = sskpd & 0xF; | 2363 | wm[0] = sskpd & 0xF; |
2364 | wm[1] = ((sskpd >> 4) & 0xFF) * 5; | 2364 | wm[1] = (sskpd >> 4) & 0xFF; |
2365 | wm[2] = ((sskpd >> 12) & 0xFF) * 5; | 2365 | wm[2] = (sskpd >> 12) & 0xFF; |
2366 | wm[3] = ((sskpd >> 20) & 0x1FF) * 5; | 2366 | wm[3] = (sskpd >> 20) & 0x1FF; |
2367 | wm[4] = ((sskpd >> 32) & 0x1FF) * 5; | 2367 | wm[4] = (sskpd >> 32) & 0x1FF; |
2368 | } | 2368 | } |
2369 | } | 2369 | } |
2370 | 2370 | ||
@@ -2442,7 +2442,7 @@ static void hsw_compute_wm_results(struct drm_device *dev, | |||
2442 | int level, max_level, wm_lp; | 2442 | int level, max_level, wm_lp; |
2443 | 2443 | ||
2444 | for (level = 1; level <= 4; level++) | 2444 | for (level = 1; level <= 4; level++) |
2445 | if (!hsw_compute_lp_wm(wm[level], lp_maximums, params, | 2445 | if (!hsw_compute_lp_wm(wm[level] * 5, lp_maximums, params, |
2446 | &lp_results[level - 1])) | 2446 | &lp_results[level - 1])) |
2447 | break; | 2447 | break; |
2448 | max_level = level - 1; | 2448 | max_level = level - 1; |