diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sprite.c | 15 |
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 | ||
424 | struct intel_plane_wm_parameters { | 424 | struct 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); | |||
979 | void intel_update_watermarks(struct drm_crtc *crtc); | 980 | void intel_update_watermarks(struct drm_crtc *crtc); |
980 | void intel_update_sprite_watermarks(struct drm_plane *plane, | 981 | void 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); |
984 | void intel_init_pm(struct drm_device *dev); | 987 | void intel_init_pm(struct drm_device *dev); |
985 | void intel_pm_setup(struct drm_device *dev); | 988 | void 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 | ||
2746 | static void ilk_update_sprite_wm(struct drm_plane *plane, | 2746 | static void |
2747 | struct drm_crtc *crtc, | 2747 | ilk_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 | ||
2889 | void intel_update_sprite_watermarks(struct drm_plane *plane, | 2891 | void 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 | ||
289 | static int | 290 | static 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 | ||
492 | static int | 494 | static 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 | ||
687 | static void | 690 | static void |