| From 9b239c55bfb7e7f3640f28970e393a26689ece96 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> |
| Date: Fri, 30 Aug 2013 14:30:24 +0300 |
| Subject: drm/i915: Use ilk_compute_wm_level to compute WM_PIPE values |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Unify the code a bit to use ilk_compute_wm_level for all watermark |
| levels. |
| |
| Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 8de123a5d89f8eaf934737758251fb18b2660231) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_pm.c | 44 ++++++++++++++++++++--------------------- |
| 1 file changed, 21 insertions(+), 23 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c |
| index 573122b5c9bd..c1c5ce03e7d6 100644 |
| --- a/drivers/gpu/drm/i915/intel_pm.c |
| +++ b/drivers/gpu/drm/i915/intel_pm.c |
| @@ -2463,33 +2463,31 @@ static bool hsw_compute_lp_wm(struct drm_i915_private *dev_priv, |
| return ilk_check_wm(level, max, result); |
| } |
| |
| -static uint32_t hsw_compute_wm_pipe(struct drm_i915_private *dev_priv, |
| - enum pipe pipe, |
| + |
| +static uint32_t hsw_compute_wm_pipe(struct drm_device *dev, |
| const struct hsw_pipe_wm_parameters *params) |
| { |
| - uint32_t pri_val, cur_val, spr_val; |
| - /* WM0 latency values stored in 0.1us units */ |
| - uint16_t pri_latency = dev_priv->wm.pri_latency[0]; |
| - uint16_t spr_latency = dev_priv->wm.spr_latency[0]; |
| - uint16_t cur_latency = dev_priv->wm.cur_latency[0]; |
| + struct drm_i915_private *dev_priv = dev->dev_private; |
| + struct intel_wm_config config = { |
| + .num_pipes_active = 1, |
| + .sprites_enabled = params->spr.enabled, |
| + .sprites_scaled = params->spr.scaled, |
| + }; |
| + struct hsw_wm_maximums max; |
| + struct intel_wm_level res; |
| + |
| + if (!params->active) |
| + return 0; |
| + |
| + ilk_wm_max(dev, 0, &config, INTEL_DDB_PART_1_2, &max); |
| |
| - pri_val = ilk_compute_pri_wm(params, pri_latency, false); |
| - spr_val = ilk_compute_spr_wm(params, spr_latency); |
| - cur_val = ilk_compute_cur_wm(params, cur_latency); |
| + ilk_compute_wm_level(dev_priv, 0, params, &res); |
| |
| - WARN(pri_val > 127, |
| - "Primary WM error, mode not supported for pipe %c\n", |
| - pipe_name(pipe)); |
| - WARN(spr_val > 127, |
| - "Sprite WM error, mode not supported for pipe %c\n", |
| - pipe_name(pipe)); |
| - WARN(cur_val > 63, |
| - "Cursor WM error, mode not supported for pipe %c\n", |
| - pipe_name(pipe)); |
| + ilk_check_wm(0, &max, &res); |
| |
| - return (pri_val << WM0_PIPE_PLANE_SHIFT) | |
| - (spr_val << WM0_PIPE_SPRITE_SHIFT) | |
| - cur_val; |
| + return (res.pri_val << WM0_PIPE_PLANE_SHIFT) | |
| + (res.spr_val << WM0_PIPE_SPRITE_SHIFT) | |
| + res.cur_val; |
| } |
| |
| static uint32_t |
| @@ -2718,7 +2716,7 @@ static void hsw_compute_wm_results(struct drm_device *dev, |
| } |
| |
| for_each_pipe(pipe) |
| - results->wm_pipe[pipe] = hsw_compute_wm_pipe(dev_priv, pipe, |
| + results->wm_pipe[pipe] = hsw_compute_wm_pipe(dev, |
| ¶ms[pipe]); |
| |
| for_each_pipe(pipe) { |
| -- |
| 1.8.5.rc3 |
| |