From: Matt Roper <matthew.d.roper@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [RFC 02/15] drm/i915: Drop parameters to intel_update_sprite_watermarks()
Date: Wed, 20 May 2015 19:12:14 -0700 [thread overview]
Message-ID: <1432174347-19138-3-git-send-email-matthew.d.roper@intel.com> (raw)
In-Reply-To: <1432174347-19138-1-git-send-email-matthew.d.roper@intel.com>
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 us to extract 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@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 1d70349..0713258 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13240,8 +13240,7 @@ static void intel_finish_crtc_commit(struct drm_crtc *crtc)
drm_for_each_legacy_plane(p, &dev->mode_config.plane_list)
if (intel_crtc->atomic.update_sprite_watermarks &
(1 << drm_plane_index(p)))
- intel_update_sprite_watermarks(p, crtc, 0, 0, 0,
- false, false);
+ intel_update_sprite_watermarks(p, crtc);
memset(&intel_crtc->atomic, 0, sizeof(intel_crtc->atomic));
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 47bc729..fe966ce 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1344,11 +1344,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 ce1d079..2170cc5 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3756,13 +3756,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 3f70d59..3a96956 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 = &intel_plane->ckey;
unsigned long surf_addr;
u32 tile_height, plane_offset, plane_size;
@@ -199,9 +198,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, bool force)
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--;
@@ -474,7 +469,7 @@ vlv_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc, bool force)
intel_flush_primary_plane(dev_priv, intel_crtc->plane);
- intel_update_sprite_watermarks(dplane, crtc, 0, 0, 0, false, false);
+ intel_update_sprite_watermarks(dplane, crtc);
}
@@ -539,9 +534,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--;
@@ -678,9 +671,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--;
--
1.8.5.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-05-21 2:12 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-21 2:12 [RFC 00/15] Atomic watermark updates Matt Roper
2015-05-21 2:12 ` [RFC 01/15] drm/i915: Test plane mask for sprite watermark updates properly Matt Roper
2015-05-21 2:12 ` Matt Roper [this message]
2015-05-21 2:12 ` [RFC 03/15] drm/i915: Update sprite watermarks outside vblank evasion Matt Roper
2015-05-21 13:48 ` Ville Syrjälä
2015-05-21 14:11 ` Damien Lespiau
2015-05-21 2:12 ` [RFC 04/15] drm/i915: Make atomic use in-flight state for CRTC active value (v2) Matt Roper
2015-05-21 2:12 ` [RFC 05/15] drm/i915: Lookup CRTC for plane directly Matt Roper
2015-05-21 14:04 ` Ville Syrjälä
2015-05-21 15:48 ` Daniel Vetter
2015-05-21 2:12 ` [RFC 06/15] drm/i915: Eliminate usage of plane_wm_parameters from ILK-style WM code Matt Roper
2015-05-21 2:12 ` [RFC 07/15] drm/i915: Eliminate usage of pipe_wm_parameters from ILK-style WM Matt Roper
2015-05-21 2:12 ` [RFC 08/15] drm/i915: Refactor ilk_update_wm (v3) Matt Roper
2015-05-21 2:12 ` [RFC 09/15] drm/i915: Allow ILK watermark computation to use atomic state Matt Roper
2015-05-21 2:12 ` [RFC 10/15] drm/i915: Move active watermarks into CRTC state Matt Roper
2015-05-21 2:12 ` [RFC 11/15] drm/i915: Calculate pipe watermark values during atomic check Matt Roper
2015-05-21 2:12 ` [RFC 12/15] drm/i915: Actually use pre-computer watermark values (!!SQUASHME) Matt Roper
2015-05-21 13:08 ` Ville Syrjälä
2015-05-21 2:12 ` [RFC 13/15] drm/i915: Introduce intel_schedule_vblank_job() Matt Roper
2015-05-21 13:20 ` Ville Syrjälä
2015-05-21 15:52 ` Daniel Vetter
2015-05-21 2:12 ` [RFC 14/15] drm/i915: Program atomic watermarks via vblank job Matt Roper
2015-05-25 15:57 ` G, Pallavi
2015-05-21 2:12 ` [RFC 15/15] drm/i915: Add intermediate watermarks Matt Roper
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1432174347-19138-3-git-send-email-matthew.d.roper@intel.com \
--to=matthew.d.roper@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox