aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h4
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h5
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c17
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c15
4 files changed, 26 insertions, 15 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0b9f7894ee82..7f4f2b745925 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -440,8 +440,8 @@ struct drm_i915_display_funcs {
440 void (*update_wm)(struct drm_crtc *crtc); 440 void (*update_wm)(struct drm_crtc *crtc);
441 void (*update_sprite_wm)(struct drm_plane *plane, 441 void (*update_sprite_wm)(struct drm_plane *plane,
442 struct drm_crtc *crtc, 442 struct drm_crtc *crtc,
443 uint32_t sprite_width, int pixel_size, 443 uint32_t sprite_width, uint32_t sprite_height,
444 bool enable, bool scaled); 444 int pixel_size, bool enable, bool scaled);
445 void (*modeset_global_resources)(struct drm_device *dev); 445 void (*modeset_global_resources)(struct drm_device *dev);
446 /* Returns the active state of the crtc, and if the crtc is active, 446 /* Returns the active state of the crtc, and if the crtc is active,
447 * fills out the pipe-config with the hw state. */ 447 * fills out the pipe-config with the hw state. */
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 719f8d2d6202..6093ebdeb7cf 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -423,6 +423,7 @@ struct intel_crtc {
423 423
424struct intel_plane_wm_parameters { 424struct intel_plane_wm_parameters {
425 uint32_t horiz_pixels; 425 uint32_t horiz_pixels;
426 uint32_t vert_pixels;
426 uint8_t bytes_per_pixel; 427 uint8_t bytes_per_pixel;
427 bool enabled; 428 bool enabled;
428 bool scaled; 429 bool scaled;
@@ -979,7 +980,9 @@ int ilk_wm_max_level(const struct drm_device *dev);
979void intel_update_watermarks(struct drm_crtc *crtc); 980void intel_update_watermarks(struct drm_crtc *crtc);
980void intel_update_sprite_watermarks(struct drm_plane *plane, 981void intel_update_sprite_watermarks(struct drm_plane *plane,
981 struct drm_crtc *crtc, 982 struct drm_crtc *crtc,
982 uint32_t sprite_width, int pixel_size, 983 uint32_t sprite_width,
984 uint32_t sprite_height,
985 int pixel_size,
983 bool enabled, bool scaled); 986 bool enabled, bool scaled);
984void intel_init_pm(struct drm_device *dev); 987void intel_init_pm(struct drm_device *dev);
985void intel_pm_setup(struct drm_device *dev); 988void intel_pm_setup(struct drm_device *dev);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index be2d5bf7f539..6e03851a4fa4 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2743,10 +2743,11 @@ static void ilk_update_wm(struct drm_crtc *crtc)
2743 ilk_write_wm_values(dev_priv, &results); 2743 ilk_write_wm_values(dev_priv, &results);
2744} 2744}
2745 2745
2746static void ilk_update_sprite_wm(struct drm_plane *plane, 2746static void
2747 struct drm_crtc *crtc, 2747ilk_update_sprite_wm(struct drm_plane *plane,
2748 uint32_t sprite_width, int pixel_size, 2748 struct drm_crtc *crtc,
2749 bool enabled, bool scaled) 2749 uint32_t sprite_width, uint32_t sprite_height,
2750 int pixel_size, bool enabled, bool scaled)
2750{ 2751{
2751 struct drm_device *dev = plane->dev; 2752 struct drm_device *dev = plane->dev;
2752 struct intel_plane *intel_plane = to_intel_plane(plane); 2753 struct intel_plane *intel_plane = to_intel_plane(plane);
@@ -2754,6 +2755,7 @@ static void ilk_update_sprite_wm(struct drm_plane *plane,
2754 intel_plane->wm.enabled = enabled; 2755 intel_plane->wm.enabled = enabled;
2755 intel_plane->wm.scaled = scaled; 2756 intel_plane->wm.scaled = scaled;
2756 intel_plane->wm.horiz_pixels = sprite_width; 2757 intel_plane->wm.horiz_pixels = sprite_width;
2758 intel_plane->wm.vert_pixels = sprite_width;
2757 intel_plane->wm.bytes_per_pixel = pixel_size; 2759 intel_plane->wm.bytes_per_pixel = pixel_size;
2758 2760
2759 /* 2761 /*
@@ -2888,13 +2890,16 @@ void intel_update_watermarks(struct drm_crtc *crtc)
2888 2890
2889void intel_update_sprite_watermarks(struct drm_plane *plane, 2891void intel_update_sprite_watermarks(struct drm_plane *plane,
2890 struct drm_crtc *crtc, 2892 struct drm_crtc *crtc,
2891 uint32_t sprite_width, int pixel_size, 2893 uint32_t sprite_width,
2894 uint32_t sprite_height,
2895 int pixel_size,
2892 bool enabled, bool scaled) 2896 bool enabled, bool scaled)
2893{ 2897{
2894 struct drm_i915_private *dev_priv = plane->dev->dev_private; 2898 struct drm_i915_private *dev_priv = plane->dev->dev_private;
2895 2899
2896 if (dev_priv->display.update_sprite_wm) 2900 if (dev_priv->display.update_sprite_wm)
2897 dev_priv->display.update_sprite_wm(plane, crtc, sprite_width, 2901 dev_priv->display.update_sprite_wm(plane, crtc,
2902 sprite_width, sprite_height,
2898 pixel_size, enabled, scaled); 2903 pixel_size, enabled, scaled);
2899} 2904}
2900 2905
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 985317eb1dc9..396c1e843956 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -218,7 +218,8 @@ vlv_update_plane(struct drm_plane *dplane, struct drm_crtc *crtc,
218 218
219 sprctl |= SP_ENABLE; 219 sprctl |= SP_ENABLE;
220 220
221 intel_update_sprite_watermarks(dplane, crtc, src_w, pixel_size, true, 221 intel_update_sprite_watermarks(dplane, crtc, src_w, src_h,
222 pixel_size, true,
222 src_w != crtc_w || src_h != crtc_h); 223 src_w != crtc_w || src_h != crtc_h);
223 224
224 /* Sizes are 0 based */ 225 /* Sizes are 0 based */
@@ -283,7 +284,7 @@ vlv_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc)
283 if (atomic_update) 284 if (atomic_update)
284 intel_pipe_update_end(intel_crtc, start_vbl_count); 285 intel_pipe_update_end(intel_crtc, start_vbl_count);
285 286
286 intel_update_sprite_watermarks(dplane, crtc, 0, 0, false, false); 287 intel_update_sprite_watermarks(dplane, crtc, 0, 0, 0, false, false);
287} 288}
288 289
289static int 290static int
@@ -406,7 +407,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
406 if (IS_HASWELL(dev) || IS_BROADWELL(dev)) 407 if (IS_HASWELL(dev) || IS_BROADWELL(dev))
407 sprctl |= SPRITE_PIPE_CSC_ENABLE; 408 sprctl |= SPRITE_PIPE_CSC_ENABLE;
408 409
409 intel_update_sprite_watermarks(plane, crtc, src_w, pixel_size, true, 410 intel_update_sprite_watermarks(plane, crtc, src_w, src_h, pixel_size,
411 true,
410 src_w != crtc_w || src_h != crtc_h); 412 src_w != crtc_w || src_h != crtc_h);
411 413
412 /* Sizes are 0 based */ 414 /* Sizes are 0 based */
@@ -486,7 +488,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
486 */ 488 */
487 intel_wait_for_vblank(dev, pipe); 489 intel_wait_for_vblank(dev, pipe);
488 490
489 intel_update_sprite_watermarks(plane, crtc, 0, 0, false, false); 491 intel_update_sprite_watermarks(plane, crtc, 0, 0, 0, false, false);
490} 492}
491 493
492static int 494static int
@@ -606,7 +608,8 @@ ilk_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
606 dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */ 608 dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */
607 dvscntr |= DVS_ENABLE; 609 dvscntr |= DVS_ENABLE;
608 610
609 intel_update_sprite_watermarks(plane, crtc, src_w, pixel_size, true, 611 intel_update_sprite_watermarks(plane, crtc, src_w, src_h,
612 pixel_size, true,
610 src_w != crtc_w || src_h != crtc_h); 613 src_w != crtc_w || src_h != crtc_h);
611 614
612 /* Sizes are 0 based */ 615 /* Sizes are 0 based */
@@ -681,7 +684,7 @@ ilk_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
681 */ 684 */
682 intel_wait_for_vblank(dev, pipe); 685 intel_wait_for_vblank(dev, pipe);
683 686
684 intel_update_sprite_watermarks(plane, crtc, 0, 0, false, false); 687 intel_update_sprite_watermarks(plane, crtc, 0, 0, 0, false, false);
685} 688}
686 689
687static void 690static void