Commit ed57cb8a authored by Damien Lespiau's avatar Damien Lespiau Committed by Daniel Vetter

drm/i915: Also give the sprite width for WM computation

In the future, we'll need the height of the fb to fetch from memory for
WM computation.
Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 6af257cd
...@@ -440,8 +440,8 @@ struct drm_i915_display_funcs { ...@@ -440,8 +440,8 @@ struct drm_i915_display_funcs {
void (*update_wm)(struct drm_crtc *crtc); void (*update_wm)(struct drm_crtc *crtc);
void (*update_sprite_wm)(struct drm_plane *plane, void (*update_sprite_wm)(struct drm_plane *plane,
struct drm_crtc *crtc, struct drm_crtc *crtc,
uint32_t sprite_width, int pixel_size, uint32_t sprite_width, uint32_t sprite_height,
bool enable, bool scaled); int pixel_size, bool enable, bool scaled);
void (*modeset_global_resources)(struct drm_device *dev); void (*modeset_global_resources)(struct drm_device *dev);
/* Returns the active state of the crtc, and if the crtc is active, /* Returns the active state of the crtc, and if the crtc is active,
* fills out the pipe-config with the hw state. */ * fills out the pipe-config with the hw state. */
......
...@@ -423,6 +423,7 @@ struct intel_crtc { ...@@ -423,6 +423,7 @@ struct intel_crtc {
struct intel_plane_wm_parameters { struct intel_plane_wm_parameters {
uint32_t horiz_pixels; uint32_t horiz_pixels;
uint32_t vert_pixels;
uint8_t bytes_per_pixel; uint8_t bytes_per_pixel;
bool enabled; bool enabled;
bool scaled; bool scaled;
...@@ -979,7 +980,9 @@ int ilk_wm_max_level(const struct drm_device *dev); ...@@ -979,7 +980,9 @@ int ilk_wm_max_level(const struct drm_device *dev);
void intel_update_watermarks(struct drm_crtc *crtc); void intel_update_watermarks(struct drm_crtc *crtc);
void intel_update_sprite_watermarks(struct drm_plane *plane, void intel_update_sprite_watermarks(struct drm_plane *plane,
struct drm_crtc *crtc, struct drm_crtc *crtc,
uint32_t sprite_width, int pixel_size, uint32_t sprite_width,
uint32_t sprite_height,
int pixel_size,
bool enabled, bool scaled); bool enabled, bool scaled);
void intel_init_pm(struct drm_device *dev); void intel_init_pm(struct drm_device *dev);
void intel_pm_setup(struct drm_device *dev); void intel_pm_setup(struct drm_device *dev);
......
...@@ -2743,10 +2743,11 @@ static void ilk_update_wm(struct drm_crtc *crtc) ...@@ -2743,10 +2743,11 @@ static void ilk_update_wm(struct drm_crtc *crtc)
ilk_write_wm_values(dev_priv, &results); ilk_write_wm_values(dev_priv, &results);
} }
static void ilk_update_sprite_wm(struct drm_plane *plane, static void
struct drm_crtc *crtc, ilk_update_sprite_wm(struct drm_plane *plane,
uint32_t sprite_width, int pixel_size, struct drm_crtc *crtc,
bool enabled, bool scaled) uint32_t sprite_width, uint32_t sprite_height,
int pixel_size, bool enabled, bool scaled)
{ {
struct drm_device *dev = plane->dev; struct drm_device *dev = plane->dev;
struct intel_plane *intel_plane = to_intel_plane(plane); struct intel_plane *intel_plane = to_intel_plane(plane);
...@@ -2754,6 +2755,7 @@ static void ilk_update_sprite_wm(struct drm_plane *plane, ...@@ -2754,6 +2755,7 @@ static void ilk_update_sprite_wm(struct drm_plane *plane,
intel_plane->wm.enabled = enabled; intel_plane->wm.enabled = enabled;
intel_plane->wm.scaled = scaled; intel_plane->wm.scaled = scaled;
intel_plane->wm.horiz_pixels = sprite_width; intel_plane->wm.horiz_pixels = sprite_width;
intel_plane->wm.vert_pixels = sprite_width;
intel_plane->wm.bytes_per_pixel = pixel_size; intel_plane->wm.bytes_per_pixel = pixel_size;
/* /*
...@@ -2888,13 +2890,16 @@ void intel_update_watermarks(struct drm_crtc *crtc) ...@@ -2888,13 +2890,16 @@ void intel_update_watermarks(struct drm_crtc *crtc)
void intel_update_sprite_watermarks(struct drm_plane *plane, void intel_update_sprite_watermarks(struct drm_plane *plane,
struct drm_crtc *crtc, struct drm_crtc *crtc,
uint32_t sprite_width, int pixel_size, uint32_t sprite_width,
uint32_t sprite_height,
int pixel_size,
bool enabled, bool scaled) bool enabled, bool scaled)
{ {
struct drm_i915_private *dev_priv = plane->dev->dev_private; struct drm_i915_private *dev_priv = plane->dev->dev_private;
if (dev_priv->display.update_sprite_wm) if (dev_priv->display.update_sprite_wm)
dev_priv->display.update_sprite_wm(plane, crtc, sprite_width, dev_priv->display.update_sprite_wm(plane, crtc,
sprite_width, sprite_height,
pixel_size, enabled, scaled); pixel_size, enabled, scaled);
} }
......
...@@ -218,7 +218,8 @@ vlv_update_plane(struct drm_plane *dplane, struct drm_crtc *crtc, ...@@ -218,7 +218,8 @@ vlv_update_plane(struct drm_plane *dplane, struct drm_crtc *crtc,
sprctl |= SP_ENABLE; sprctl |= SP_ENABLE;
intel_update_sprite_watermarks(dplane, crtc, src_w, pixel_size, true, intel_update_sprite_watermarks(dplane, crtc, src_w, src_h,
pixel_size, true,
src_w != crtc_w || src_h != crtc_h); src_w != crtc_w || src_h != crtc_h);
/* Sizes are 0 based */ /* Sizes are 0 based */
...@@ -283,7 +284,7 @@ vlv_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc) ...@@ -283,7 +284,7 @@ vlv_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc)
if (atomic_update) if (atomic_update)
intel_pipe_update_end(intel_crtc, start_vbl_count); intel_pipe_update_end(intel_crtc, start_vbl_count);
intel_update_sprite_watermarks(dplane, crtc, 0, 0, false, false); intel_update_sprite_watermarks(dplane, crtc, 0, 0, 0, false, false);
} }
static int static int
...@@ -406,7 +407,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, ...@@ -406,7 +407,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
if (IS_HASWELL(dev) || IS_BROADWELL(dev)) if (IS_HASWELL(dev) || IS_BROADWELL(dev))
sprctl |= SPRITE_PIPE_CSC_ENABLE; sprctl |= SPRITE_PIPE_CSC_ENABLE;
intel_update_sprite_watermarks(plane, crtc, src_w, pixel_size, true, intel_update_sprite_watermarks(plane, crtc, src_w, src_h, pixel_size,
true,
src_w != crtc_w || src_h != crtc_h); src_w != crtc_w || src_h != crtc_h);
/* Sizes are 0 based */ /* Sizes are 0 based */
...@@ -486,7 +488,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc) ...@@ -486,7 +488,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
*/ */
intel_wait_for_vblank(dev, pipe); intel_wait_for_vblank(dev, pipe);
intel_update_sprite_watermarks(plane, crtc, 0, 0, false, false); intel_update_sprite_watermarks(plane, crtc, 0, 0, 0, false, false);
} }
static int static int
...@@ -606,7 +608,8 @@ ilk_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, ...@@ -606,7 +608,8 @@ ilk_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */ dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */
dvscntr |= DVS_ENABLE; dvscntr |= DVS_ENABLE;
intel_update_sprite_watermarks(plane, crtc, src_w, pixel_size, true, intel_update_sprite_watermarks(plane, crtc, src_w, src_h,
pixel_size, true,
src_w != crtc_w || src_h != crtc_h); src_w != crtc_w || src_h != crtc_h);
/* Sizes are 0 based */ /* Sizes are 0 based */
...@@ -681,7 +684,7 @@ ilk_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc) ...@@ -681,7 +684,7 @@ ilk_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
*/ */
intel_wait_for_vblank(dev, pipe); intel_wait_for_vblank(dev, pipe);
intel_update_sprite_watermarks(plane, crtc, 0, 0, false, false); intel_update_sprite_watermarks(plane, crtc, 0, 0, 0, false, false);
} }
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment