[Intel-gfx] [PATCH 1/2] drm/i915: Drop parameters to intel_update_sprite_watermarks()
Matt Roper
matthew.d.roper at intel.com
Mon Jun 22 18:30:32 PDT 2015
The values that ultimately get passed to
intel_update_sprite_watermarks() are pulled out of the plane state
(which has already been swapped into plane->state) as we update the
plane programming. Drop the function parameters and just pull the
relevant values out of the state structure inside the function.
This change will make it easier for a future patch to pull the sprite
WM programming out of the low-level foo_update_plane() functions (which
are run under vblank evasion and shouldn't be calling potentially
blocking watermark functions).
Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 3 +--
drivers/gpu/drm/i915/intel_drv.h | 6 +-----
drivers/gpu/drm/i915/intel_pm.c | 17 ++++++++++++-----
drivers/gpu/drm/i915/intel_sprite.c | 21 ++++++---------------
4 files changed, 20 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index de6f8cc..5e8e01c 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4719,8 +4719,7 @@ static void intel_post_plane_update(struct intel_crtc *crtc)
intel_post_enable_primary(&crtc->base);
drm_for_each_plane_mask(plane, dev, atomic->update_sprite_watermarks)
- intel_update_sprite_watermarks(plane, &crtc->base,
- 0, 0, 0, false, false);
+ intel_update_sprite_watermarks(plane, &crtc->base);
memset(atomic, 0, sizeof(*atomic));
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index e2174fd..fdfa2c9 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1355,11 +1355,7 @@ void intel_suspend_hw(struct drm_device *dev);
int ilk_wm_max_level(const struct drm_device *dev);
void intel_update_watermarks(struct drm_crtc *crtc);
void intel_update_sprite_watermarks(struct drm_plane *plane,
- struct drm_crtc *crtc,
- uint32_t sprite_width,
- uint32_t sprite_height,
- int pixel_size,
- bool enabled, bool scaled);
+ struct drm_crtc *crtc);
void intel_init_pm(struct drm_device *dev);
void intel_pm_setup(struct drm_device *dev);
void intel_gpu_ips_init(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 32ff034..4d3cb70 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3755,13 +3755,20 @@ void intel_update_watermarks(struct drm_crtc *crtc)
}
void intel_update_sprite_watermarks(struct drm_plane *plane,
- struct drm_crtc *crtc,
- uint32_t sprite_width,
- uint32_t sprite_height,
- int pixel_size,
- bool enabled, bool scaled)
+ struct drm_crtc *crtc)
{
struct drm_i915_private *dev_priv = plane->dev->dev_private;
+ struct intel_plane_state *state = to_intel_plane_state(plane->state);
+ struct drm_framebuffer *fb = state->base.fb;
+ uint32_t sprite_width = drm_rect_width(&state->dst);
+ uint32_t sprite_height = drm_rect_height(&state->dst);
+ int pixel_size = fb ? drm_format_plane_cpp(fb->pixel_format, 0) : 0;
+ bool enabled = state->visible;
+ unsigned int src_w = drm_rect_width(&state->src) >> 16;
+ unsigned int src_h = drm_rect_height(&state->src) >> 16;
+ unsigned int dst_w = drm_rect_width(&state->dst);
+ unsigned int dst_h = drm_rect_height(&state->dst);
+ bool scaled = (src_w != dst_w || src_h != dst_h);
if (dev_priv->display.update_sprite_wm)
dev_priv->display.update_sprite_wm(plane, crtc,
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index e0045aa..b627067 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -181,7 +181,6 @@ skl_update_plane(struct drm_plane *drm_plane, struct drm_crtc *crtc,
const int pipe = intel_plane->pipe;
const int plane = intel_plane->plane + 1;
u32 plane_ctl, stride_div, stride;
- int pixel_size = drm_format_plane_cpp(fb->pixel_format, 0);
const struct drm_intel_sprite_colorkey *key =
&to_intel_plane_state(drm_plane->state)->ckey;
unsigned long surf_addr;
@@ -200,9 +199,7 @@ skl_update_plane(struct drm_plane *drm_plane, struct drm_crtc *crtc,
rotation = drm_plane->state->rotation;
plane_ctl |= skl_plane_ctl_rotation(rotation);
- intel_update_sprite_watermarks(drm_plane, crtc, src_w, src_h,
- pixel_size, true,
- src_w != crtc_w || src_h != crtc_h);
+ intel_update_sprite_watermarks(drm_plane, crtc);
stride_div = intel_fb_stride_alignment(dev, fb->modifier[0],
fb->pixel_format);
@@ -286,7 +283,7 @@ skl_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc)
I915_WRITE(PLANE_SURF(pipe, plane), 0);
POSTING_READ(PLANE_SURF(pipe, plane));
- intel_update_sprite_watermarks(dplane, crtc, 0, 0, 0, false, false);
+ intel_update_sprite_watermarks(dplane, crtc);
}
static void
@@ -402,9 +399,7 @@ vlv_update_plane(struct drm_plane *dplane, struct drm_crtc *crtc,
if (obj->tiling_mode != I915_TILING_NONE)
sprctl |= SP_TILED;
- intel_update_sprite_watermarks(dplane, crtc, src_w, src_h,
- pixel_size, true,
- src_w != crtc_w || src_h != crtc_h);
+ intel_update_sprite_watermarks(dplane, crtc);
/* Sizes are 0 based */
src_w--;
@@ -471,7 +466,7 @@ vlv_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc)
I915_WRITE(SPSURF(pipe, plane), 0);
POSTING_READ(SPSURF(pipe, plane));
- intel_update_sprite_watermarks(dplane, crtc, 0, 0, 0, false, false);
+ intel_update_sprite_watermarks(dplane, crtc);
}
static void
@@ -535,9 +530,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
if (IS_HASWELL(dev) || IS_BROADWELL(dev))
sprctl |= SPRITE_PIPE_CSC_ENABLE;
- intel_update_sprite_watermarks(plane, crtc, src_w, src_h, pixel_size,
- true,
- src_w != crtc_w || src_h != crtc_h);
+ intel_update_sprite_watermarks(plane, crtc);
/* Sizes are 0 based */
src_w--;
@@ -672,9 +665,7 @@ ilk_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
if (IS_GEN6(dev))
dvscntr |= DVS_TRICKLE_FEED_DISABLE; /* must disable */
- intel_update_sprite_watermarks(plane, crtc, src_w, src_h,
- pixel_size, true,
- src_w != crtc_w || src_h != crtc_h);
+ intel_update_sprite_watermarks(plane, crtc);
/* Sizes are 0 based */
src_w--;
--
2.1.4
More information about the Intel-gfx
mailing list