aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2013-08-06 15:24:11 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-08 08:11:14 -0400
commitadf3d35e4aced032f0449c6d69b0a90fea14692f (patch)
tree2d32575f263038c3bfc58850f2a059c7d66707a3
parent88a94a58a07267d979cc168c3e511b99f4164951 (diff)
drm/i915: Pass plane and crtc to intel_update_sprite_watermarks
We're going to want to know the crtc in the watermark code to avoid doing more work than we have to. We should also pass the plane we're disabling so that we know where to stick our watermark parameters without having to go look the plane up. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h3
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h3
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c34
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c8
4 files changed, 24 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2cfa21fbedce..550ad171628c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -359,7 +359,8 @@ struct drm_i915_display_funcs {
359 struct dpll *match_clock, 359 struct dpll *match_clock,
360 struct dpll *best_clock); 360 struct dpll *best_clock);
361 void (*update_wm)(struct drm_device *dev); 361 void (*update_wm)(struct drm_device *dev);
362 void (*update_sprite_wm)(struct drm_device *dev, int pipe, 362 void (*update_sprite_wm)(struct drm_plane *plane,
363 struct drm_crtc *crtc,
363 uint32_t sprite_width, int pixel_size, 364 uint32_t sprite_width, int pixel_size,
364 bool enable, bool scaled); 365 bool enable, bool scaled);
365 void (*modeset_global_resources)(struct drm_device *dev); 366 void (*modeset_global_resources)(struct drm_device *dev);
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index da394f354453..caf8b8dfe17a 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -716,7 +716,8 @@ extern void intel_ddi_init(struct drm_device *dev, enum port port);
716 716
717/* For use by IVB LP watermark workaround in intel_sprite.c */ 717/* For use by IVB LP watermark workaround in intel_sprite.c */
718extern void intel_update_watermarks(struct drm_device *dev); 718extern void intel_update_watermarks(struct drm_device *dev);
719extern void intel_update_sprite_watermarks(struct drm_device *dev, int pipe, 719extern void intel_update_sprite_watermarks(struct drm_plane *plane,
720 struct drm_crtc *crtc,
720 uint32_t sprite_width, int pixel_size, 721 uint32_t sprite_width, int pixel_size,
721 bool enabled, bool scaled); 722 bool enabled, bool scaled);
722 723
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index ed772fecbb07..023e287da01f 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2866,25 +2866,19 @@ static void haswell_update_wm(struct drm_device *dev)
2866 hsw_write_wm_values(dev_priv, best_results, partitioning); 2866 hsw_write_wm_values(dev_priv, best_results, partitioning);
2867} 2867}
2868 2868
2869static void haswell_update_sprite_wm(struct drm_device *dev, int pipe, 2869static void haswell_update_sprite_wm(struct drm_plane *plane,
2870 struct drm_crtc *crtc,
2870 uint32_t sprite_width, int pixel_size, 2871 uint32_t sprite_width, int pixel_size,
2871 bool enabled, bool scaled) 2872 bool enabled, bool scaled)
2872{ 2873{
2873 struct drm_plane *plane; 2874 struct intel_plane *intel_plane = to_intel_plane(plane);
2874
2875 list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
2876 struct intel_plane *intel_plane = to_intel_plane(plane);
2877 2875
2878 if (intel_plane->pipe == pipe) { 2876 intel_plane->wm.enabled = enabled;
2879 intel_plane->wm.enabled = enabled; 2877 intel_plane->wm.scaled = scaled;
2880 intel_plane->wm.scaled = scaled; 2878 intel_plane->wm.horiz_pixels = sprite_width;
2881 intel_plane->wm.horiz_pixels = sprite_width; 2879 intel_plane->wm.bytes_per_pixel = pixel_size;
2882 intel_plane->wm.bytes_per_pixel = pixel_size;
2883 break;
2884 }
2885 }
2886 2880
2887 haswell_update_wm(dev); 2881 haswell_update_wm(plane->dev);
2888} 2882}
2889 2883
2890static bool 2884static bool
@@ -2963,11 +2957,14 @@ sandybridge_compute_sprite_srwm(struct drm_device *dev, int plane,
2963 return *sprite_wm > 0x3ff ? false : true; 2957 return *sprite_wm > 0x3ff ? false : true;
2964} 2958}
2965 2959
2966static void sandybridge_update_sprite_wm(struct drm_device *dev, int pipe, 2960static void sandybridge_update_sprite_wm(struct drm_plane *plane,
2961 struct drm_crtc *crtc,
2967 uint32_t sprite_width, int pixel_size, 2962 uint32_t sprite_width, int pixel_size,
2968 bool enabled, bool scaled) 2963 bool enabled, bool scaled)
2969{ 2964{
2965 struct drm_device *dev = plane->dev;
2970 struct drm_i915_private *dev_priv = dev->dev_private; 2966 struct drm_i915_private *dev_priv = dev->dev_private;
2967 int pipe = to_intel_plane(plane)->pipe;
2971 int latency = dev_priv->wm.spr_latency[0] * 100; /* In unit 0.1us */ 2968 int latency = dev_priv->wm.spr_latency[0] * 100; /* In unit 0.1us */
2972 u32 val; 2969 u32 val;
2973 int sprite_wm, reg; 2970 int sprite_wm, reg;
@@ -3086,14 +3083,15 @@ void intel_update_watermarks(struct drm_device *dev)
3086 dev_priv->display.update_wm(dev); 3083 dev_priv->display.update_wm(dev);
3087} 3084}
3088 3085
3089void intel_update_sprite_watermarks(struct drm_device *dev, int pipe, 3086void intel_update_sprite_watermarks(struct drm_plane *plane,
3087 struct drm_crtc *crtc,
3090 uint32_t sprite_width, int pixel_size, 3088 uint32_t sprite_width, int pixel_size,
3091 bool enabled, bool scaled) 3089 bool enabled, bool scaled)
3092{ 3090{
3093 struct drm_i915_private *dev_priv = dev->dev_private; 3091 struct drm_i915_private *dev_priv = plane->dev->dev_private;
3094 3092
3095 if (dev_priv->display.update_sprite_wm) 3093 if (dev_priv->display.update_sprite_wm)
3096 dev_priv->display.update_sprite_wm(dev, pipe, sprite_width, 3094 dev_priv->display.update_sprite_wm(plane, crtc, sprite_width,
3097 pixel_size, enabled, scaled); 3095 pixel_size, enabled, scaled);
3098} 3096}
3099 3097
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 0a174d7e5854..05742f7d7006 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -109,7 +109,7 @@ vlv_update_plane(struct drm_plane *dplane, struct drm_crtc *crtc,
109 109
110 sprctl |= SP_ENABLE; 110 sprctl |= SP_ENABLE;
111 111
112 intel_update_sprite_watermarks(dev, pipe, src_w, pixel_size, true, 112 intel_update_sprite_watermarks(dplane, crtc, src_w, pixel_size, true,
113 src_w != crtc_w || src_h != crtc_h); 113 src_w != crtc_w || src_h != crtc_h);
114 114
115 /* Sizes are 0 based */ 115 /* Sizes are 0 based */
@@ -265,7 +265,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
265 if (IS_HASWELL(dev)) 265 if (IS_HASWELL(dev))
266 sprctl |= SPRITE_PIPE_CSC_ENABLE; 266 sprctl |= SPRITE_PIPE_CSC_ENABLE;
267 267
268 intel_update_sprite_watermarks(dev, pipe, src_w, pixel_size, true, 268 intel_update_sprite_watermarks(plane, crtc, src_w, pixel_size, true,
269 src_w != crtc_w || src_h != crtc_h); 269 src_w != crtc_w || src_h != crtc_h);
270 270
271 /* Sizes are 0 based */ 271 /* Sizes are 0 based */
@@ -340,7 +340,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
340 340
341 dev_priv->sprite_scaling_enabled &= ~(1 << pipe); 341 dev_priv->sprite_scaling_enabled &= ~(1 << pipe);
342 342
343 intel_update_sprite_watermarks(dev, pipe, 0, 0, false, false); 343 intel_update_sprite_watermarks(plane, crtc, 0, 0, false, false);
344 344
345 /* potentially re-enable LP watermarks */ 345 /* potentially re-enable LP watermarks */
346 if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled) 346 if (scaling_was_enabled && !dev_priv->sprite_scaling_enabled)
@@ -455,7 +455,7 @@ ilk_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
455 dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */ 455 dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */
456 dvscntr |= DVS_ENABLE; 456 dvscntr |= DVS_ENABLE;
457 457
458 intel_update_sprite_watermarks(dev, pipe, src_w, pixel_size, true, 458 intel_update_sprite_watermarks(plane, crtc, src_w, pixel_size, true,
459 src_w != crtc_w || src_h != crtc_h); 459 src_w != crtc_w || src_h != crtc_h);
460 460
461 /* Sizes are 0 based */ 461 /* Sizes are 0 based */