| From 2857d704e3fbdc30aa3af9e5cf1a4168257787f1 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> |
| Date: Tue, 10 Sep 2013 11:40:40 +0300 |
| Subject: drm/i915: Pass crtc to intel_update_watermarks() |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Passing the appropriate crtc to intel_update_watermarks() should help |
| in avoiding needless work in the future. |
| |
| v2: Avoid clash with internal 'crtc' variable in some wm functions |
| |
| Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> |
| Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 46ba614c0045b0b5354397010578e8b56d621251) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/i915_drv.h | 2 +- |
| drivers/gpu/drm/i915/intel_display.c | 20 +++++++++---------- |
| drivers/gpu/drm/i915/intel_drv.h | 2 +- |
| drivers/gpu/drm/i915/intel_pm.c | 38 +++++++++++++++++++++++------------- |
| drivers/gpu/drm/i915/intel_sprite.c | 6 +++--- |
| 5 files changed, 39 insertions(+), 29 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h |
| index 1fb01b5b819d..81ba5bbc97fa 100644 |
| --- a/drivers/gpu/drm/i915/i915_drv.h |
| +++ b/drivers/gpu/drm/i915/i915_drv.h |
| @@ -361,7 +361,7 @@ struct drm_i915_display_funcs { |
| int target, int refclk, |
| struct dpll *match_clock, |
| struct dpll *best_clock); |
| - void (*update_wm)(struct drm_device *dev); |
| + void (*update_wm)(struct drm_crtc *crtc); |
| void (*update_sprite_wm)(struct drm_plane *plane, |
| struct drm_crtc *crtc, |
| uint32_t sprite_width, int pixel_size, |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index 907b2ecb6595..c5123ac68cf9 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -3262,7 +3262,7 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc) |
| intel_set_cpu_fifo_underrun_reporting(dev, pipe, true); |
| intel_set_pch_fifo_underrun_reporting(dev, pipe, true); |
| |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| for_each_encoder_on_crtc(dev, crtc, encoder) |
| if (encoder->pre_enable) |
| @@ -3372,7 +3372,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc) |
| if (intel_crtc->config.has_pch_encoder) |
| intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true); |
| |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| if (intel_crtc->config.has_pch_encoder) |
| dev_priv->display.fdi_link_train(crtc); |
| @@ -3506,7 +3506,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc) |
| } |
| |
| intel_crtc->active = false; |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| mutex_lock(&dev->struct_mutex); |
| intel_update_fbc(dev); |
| @@ -3565,7 +3565,7 @@ static void haswell_crtc_disable(struct drm_crtc *crtc) |
| } |
| |
| intel_crtc->active = false; |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| mutex_lock(&dev->struct_mutex); |
| intel_update_fbc(dev); |
| @@ -3665,7 +3665,7 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc) |
| return; |
| |
| intel_crtc->active = true; |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| for_each_encoder_on_crtc(dev, crtc, encoder) |
| if (encoder->pre_pll_enable) |
| @@ -3710,7 +3710,7 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc) |
| return; |
| |
| intel_crtc->active = true; |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| for_each_encoder_on_crtc(dev, crtc, encoder) |
| if (encoder->pre_enable) |
| @@ -3794,7 +3794,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc) |
| |
| intel_crtc->active = false; |
| intel_update_fbc(dev); |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| } |
| |
| static void i9xx_crtc_off(struct drm_crtc *crtc) |
| @@ -4955,7 +4955,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, |
| |
| ret = intel_pipe_set_base(crtc, x, y, fb); |
| |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| return ret; |
| } |
| @@ -5843,7 +5843,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc, |
| |
| ret = intel_pipe_set_base(crtc, x, y, fb); |
| |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| return ret; |
| } |
| @@ -6300,7 +6300,7 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc, |
| |
| ret = intel_pipe_set_base(crtc, x, y, fb); |
| |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| |
| return ret; |
| } |
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h |
| index 90cf672c0c69..c61911e19c29 100644 |
| --- a/drivers/gpu/drm/i915/intel_drv.h |
| +++ b/drivers/gpu/drm/i915/intel_drv.h |
| @@ -716,7 +716,7 @@ extern void intel_ddi_init(struct drm_device *dev, enum port port); |
| extern enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder); |
| |
| /* For use by IVB LP watermark workaround in intel_sprite.c */ |
| -extern void intel_update_watermarks(struct drm_device *dev); |
| +extern void intel_update_watermarks(struct drm_crtc *crtc); |
| extern void intel_update_sprite_watermarks(struct drm_plane *plane, |
| struct drm_crtc *crtc, |
| uint32_t sprite_width, int pixel_size, |
| diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c |
| index dd176b7296c1..22ee0e8a3b38 100644 |
| --- a/drivers/gpu/drm/i915/intel_pm.c |
| +++ b/drivers/gpu/drm/i915/intel_pm.c |
| @@ -1087,8 +1087,9 @@ static struct drm_crtc *single_enabled_crtc(struct drm_device *dev) |
| return enabled; |
| } |
| |
| -static void pineview_update_wm(struct drm_device *dev) |
| +static void pineview_update_wm(struct drm_crtc *unused_crtc) |
| { |
| + struct drm_device *dev = unused_crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct drm_crtc *crtc; |
| const struct cxsr_latency *latency; |
| @@ -1365,8 +1366,9 @@ static void vlv_update_drain_latency(struct drm_device *dev) |
| |
| #define single_plane_enabled(mask) is_power_of_2(mask) |
| |
| -static void valleyview_update_wm(struct drm_device *dev) |
| +static void valleyview_update_wm(struct drm_crtc *crtc) |
| { |
| + struct drm_device *dev = crtc->dev; |
| static const int sr_latency_ns = 12000; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| int planea_wm, planeb_wm, cursora_wm, cursorb_wm; |
| @@ -1424,8 +1426,9 @@ static void valleyview_update_wm(struct drm_device *dev) |
| (cursor_sr << DSPFW_CURSOR_SR_SHIFT)); |
| } |
| |
| -static void g4x_update_wm(struct drm_device *dev) |
| +static void g4x_update_wm(struct drm_crtc *crtc) |
| { |
| + struct drm_device *dev = crtc->dev; |
| static const int sr_latency_ns = 12000; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| int planea_wm, planeb_wm, cursora_wm, cursorb_wm; |
| @@ -1476,8 +1479,9 @@ static void g4x_update_wm(struct drm_device *dev) |
| (cursor_sr << DSPFW_CURSOR_SR_SHIFT)); |
| } |
| |
| -static void i965_update_wm(struct drm_device *dev) |
| +static void i965_update_wm(struct drm_crtc *unused_crtc) |
| { |
| + struct drm_device *dev = unused_crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct drm_crtc *crtc; |
| int srwm = 1; |
| @@ -1541,8 +1545,9 @@ static void i965_update_wm(struct drm_device *dev) |
| I915_WRITE(DSPFW3, (cursor_sr << DSPFW_CURSOR_SR_SHIFT)); |
| } |
| |
| -static void i9xx_update_wm(struct drm_device *dev) |
| +static void i9xx_update_wm(struct drm_crtc *unused_crtc) |
| { |
| + struct drm_device *dev = unused_crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| const struct intel_watermark_params *wm_info; |
| uint32_t fwater_lo; |
| @@ -1658,8 +1663,9 @@ static void i9xx_update_wm(struct drm_device *dev) |
| } |
| } |
| |
| -static void i830_update_wm(struct drm_device *dev) |
| +static void i830_update_wm(struct drm_crtc *unused_crtc) |
| { |
| + struct drm_device *dev = unused_crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct drm_crtc *crtc; |
| uint32_t fwater_lo; |
| @@ -1785,8 +1791,9 @@ static bool ironlake_compute_srwm(struct drm_device *dev, int level, int plane, |
| display, cursor); |
| } |
| |
| -static void ironlake_update_wm(struct drm_device *dev) |
| +static void ironlake_update_wm(struct drm_crtc *crtc) |
| { |
| + struct drm_device *dev = crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| int fbc_wm, plane_wm, cursor_wm; |
| unsigned int enabled; |
| @@ -1868,8 +1875,9 @@ static void ironlake_update_wm(struct drm_device *dev) |
| */ |
| } |
| |
| -static void sandybridge_update_wm(struct drm_device *dev) |
| +static void sandybridge_update_wm(struct drm_crtc *crtc) |
| { |
| + struct drm_device *dev = crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| int latency = dev_priv->wm.pri_latency[0] * 100; /* In unit 0.1us */ |
| u32 val; |
| @@ -1970,8 +1978,9 @@ static void sandybridge_update_wm(struct drm_device *dev) |
| cursor_wm); |
| } |
| |
| -static void ivybridge_update_wm(struct drm_device *dev) |
| +static void ivybridge_update_wm(struct drm_crtc *crtc) |
| { |
| + struct drm_device *dev = crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| int latency = dev_priv->wm.pri_latency[0] * 100; /* In unit 0.1us */ |
| u32 val; |
| @@ -2841,8 +2850,9 @@ static void hsw_write_wm_values(struct drm_i915_private *dev_priv, |
| I915_WRITE(WM3_LP_ILK, results->wm_lp[2]); |
| } |
| |
| -static void haswell_update_wm(struct drm_device *dev) |
| +static void haswell_update_wm(struct drm_crtc *crtc) |
| { |
| + struct drm_device *dev = crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct hsw_wm_maximums lp_max_1_2, lp_max_5_6; |
| struct hsw_pipe_wm_parameters params[3]; |
| @@ -2879,7 +2889,7 @@ static void haswell_update_sprite_wm(struct drm_plane *plane, |
| intel_plane->wm.horiz_pixels = sprite_width; |
| intel_plane->wm.bytes_per_pixel = pixel_size; |
| |
| - haswell_update_wm(plane->dev); |
| + haswell_update_wm(crtc); |
| } |
| |
| static bool |
| @@ -3076,12 +3086,12 @@ static void sandybridge_update_sprite_wm(struct drm_plane *plane, |
| * We don't use the sprite, so we can ignore that. And on Crestline we have |
| * to set the non-SR watermarks to 8. |
| */ |
| -void intel_update_watermarks(struct drm_device *dev) |
| +void intel_update_watermarks(struct drm_crtc *crtc) |
| { |
| - struct drm_i915_private *dev_priv = dev->dev_private; |
| + struct drm_i915_private *dev_priv = crtc->dev->dev_private; |
| |
| if (dev_priv->display.update_wm) |
| - dev_priv->display.update_wm(dev); |
| + dev_priv->display.update_wm(crtc); |
| } |
| |
| void intel_update_sprite_watermarks(struct drm_plane *plane, |
| diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c |
| index ad6ec4b39005..d9c7a667553a 100644 |
| --- a/drivers/gpu/drm/i915/intel_sprite.c |
| +++ b/drivers/gpu/drm/i915/intel_sprite.c |
| @@ -288,7 +288,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, |
| dev_priv->sprite_scaling_enabled |= 1 << pipe; |
| |
| if (!scaling_was_enabled) { |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| intel_wait_for_vblank(dev, pipe); |
| } |
| sprscale = SPRITE_SCALE_ENABLE | (src_w << 16) | src_h; |
| @@ -323,7 +323,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, |
| |
| /* potentially re-enable LP watermarks */ |
| if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled) |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| } |
| |
| static void |
| @@ -349,7 +349,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc) |
| |
| /* potentially re-enable LP watermarks */ |
| if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled) |
| - intel_update_watermarks(dev); |
| + intel_update_watermarks(crtc); |
| } |
| |
| static int |
| -- |
| 1.8.5.rc3 |
| |