From: Daniel Vetter <daniel@ffwll.ch>
To: Paulo Zanoni <przanoni@gmail.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 02/24] drm/i915: Add some more tracked state to intel_pipe_wm
Date: Tue, 29 Apr 2014 13:18:50 +0200 [thread overview]
Message-ID: <20140429111850.GP32404@phenom.ffwll.local> (raw)
In-Reply-To: <CA+gsUGTgvaOCkeMZ3cHdb4TFnny-BjRSpKBEm4qZ7ZYqPPmi8g@mail.gmail.com>
On Mon, Apr 07, 2014 at 11:14:05AM -0300, Paulo Zanoni wrote:
> 2014-03-07 13:32 GMT-03:00 <ville.syrjala@linux.intel.com>:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > intel_pipe_wm will be used to track the state in different stages
> > of the watermark update process. For that we need to keep a bit
> > more state in intel_pipe_wm.
> >
> > We also need to separate the multi-pipe intel_wm_config computation
> > from ilk_compute_wm_parameters() as that one deals with the future
> > state, and we need the intel_wm_config to match the current hardware
> > state at the time we do the watermark merging for multiple pipes.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Needs minor rebase, but looks correct.
Ok in my eyes this conflict looks a bit tricky, and since I lack the
insight of you two for the watermark code I'd prefer a rebased version.
-Daniel
>
> <insert complaint about the fact that the watermarks code is pretty
> complex these days>
>
> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
>
> > ---
> > drivers/gpu/drm/i915/intel_drv.h | 3 ++
> > drivers/gpu/drm/i915/intel_pm.c | 64 +++++++++++++++++++++++++++-------------
> > 2 files changed, 46 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 8c9892d..f022a78 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -333,6 +333,9 @@ struct intel_pipe_wm {
> > struct intel_wm_level wm[5];
> > uint32_t linetime;
> > bool fbc_wm_enabled;
> > + bool pipe_enabled;
> > + bool sprites_enabled;
> > + bool sprites_scaled;
> > };
> >
> > struct intel_crtc {
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index 26c79ed..e0d1c8b 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -2105,38 +2105,52 @@ static void intel_setup_wm_latency(struct drm_device *dev)
> > }
> >
> > static void ilk_compute_wm_parameters(struct drm_crtc *crtc,
> > - struct ilk_pipe_wm_parameters *p,
> > - struct intel_wm_config *config)
> > + struct ilk_pipe_wm_parameters *p)
> > {
> > struct drm_device *dev = crtc->dev;
> > struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> > enum pipe pipe = intel_crtc->pipe;
> > struct drm_plane *plane;
> >
> > - p->active = intel_crtc_active(crtc);
> > - if (p->active) {
> > - p->pipe_htotal = intel_crtc->config.adjusted_mode.crtc_htotal;
> > - p->pixel_rate = ilk_pipe_pixel_rate(dev, crtc);
> > - p->pri.bytes_per_pixel = crtc->fb->bits_per_pixel / 8;
> > - p->cur.bytes_per_pixel = 4;
> > - p->pri.horiz_pixels = intel_crtc->config.pipe_src_w;
> > - p->cur.horiz_pixels = 64;
> > - /* TODO: for now, assume primary and cursor planes are always enabled. */
> > - p->pri.enabled = true;
> > - p->cur.enabled = true;
> > - }
> > + if (!intel_crtc_active(crtc))
> > + return;
> >
> > - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
> > - config->num_pipes_active += intel_crtc_active(crtc);
> > + p->active = true;
> > + p->pipe_htotal = intel_crtc->config.adjusted_mode.crtc_htotal;
> > + p->pixel_rate = ilk_pipe_pixel_rate(dev, crtc);
> > + p->pri.bytes_per_pixel = crtc->fb->bits_per_pixel / 8;
> > + p->cur.bytes_per_pixel = 4;
> > + p->pri.horiz_pixels = intel_crtc->config.pipe_src_w;
> > + p->cur.horiz_pixels = 64;
> > + /* TODO: for now, assume primary and cursor planes are always enabled. */
> > + p->pri.enabled = true;
> > + p->cur.enabled = true;
> >
> > list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> > struct intel_plane *intel_plane = to_intel_plane(plane);
> >
> > - if (intel_plane->pipe == pipe)
> > + if (intel_plane->pipe == pipe) {
> > p->spr = intel_plane->wm;
> > + break;
> > + }
> > + }
> > +}
> >
> > - config->sprites_enabled |= intel_plane->wm.enabled;
> > - config->sprites_scaled |= intel_plane->wm.scaled;
> > +static void ilk_compute_wm_config(struct drm_device *dev,
> > + struct intel_wm_config *config)
> > +{
> > + struct intel_crtc *intel_crtc;
> > +
> > + /* Compute the currently _active_ config */
> > + list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list, base.head) {
> > + const struct intel_pipe_wm *wm = &intel_crtc->wm.active;
> > +
> > + if (!wm->pipe_enabled)
> > + continue;
> > +
> > + config->sprites_enabled |= wm->sprites_enabled;
> > + config->sprites_scaled |= wm->sprites_scaled;
> > + config->num_pipes_active++;
> > }
> > }
> >
> > @@ -2159,6 +2173,10 @@ static bool intel_compute_pipe_wm(struct drm_crtc *crtc,
> > /* LP0 watermarks always use 1/2 DDB partitioning */
> > ilk_compute_wm_maximums(dev, 0, &config, INTEL_DDB_PART_1_2, &max);
> >
> > + pipe_wm->pipe_enabled = params->active;
> > + pipe_wm->sprites_enabled = params->spr.enabled;
> > + pipe_wm->sprites_scaled = params->spr.scaled;
> > +
> > /* ILK/SNB: LP2+ watermarks only w/o sprites */
> > if (INTEL_INFO(dev)->gen <= 6 && params->spr.enabled)
> > max_level = 1;
> > @@ -2548,7 +2566,7 @@ static void ilk_update_wm(struct drm_crtc *crtc)
> > struct intel_pipe_wm lp_wm_1_2 = {}, lp_wm_5_6 = {}, *best_lp_wm;
> > struct intel_wm_config config = {};
> >
> > - ilk_compute_wm_parameters(crtc, ¶ms, &config);
> > + ilk_compute_wm_parameters(crtc, ¶ms);
> >
> > intel_compute_pipe_wm(crtc, ¶ms, &pipe_wm);
> >
> > @@ -2557,6 +2575,8 @@ static void ilk_update_wm(struct drm_crtc *crtc)
> >
> > intel_crtc->wm.active = pipe_wm;
> >
> > + ilk_compute_wm_config(dev, &config);
> > +
> > ilk_compute_wm_maximums(dev, 1, &config, INTEL_DDB_PART_1_2, &max);
> > ilk_wm_merge(dev, &config, &max, &lp_wm_1_2);
> >
> > @@ -2623,7 +2643,9 @@ static void ilk_pipe_wm_get_hw_state(struct drm_crtc *crtc)
> > if (IS_HASWELL(dev) || IS_BROADWELL(dev))
> > hw->wm_linetime[pipe] = I915_READ(PIPE_WM_LINETIME(pipe));
> >
> > - if (intel_crtc_active(crtc)) {
> > + active->pipe_enabled = intel_crtc_active(crtc);
> > +
> > + if (active->pipe_enabled) {
> > u32 tmp = hw->wm_pipe[pipe];
> >
> > /*
> > --
> > 1.8.3.2
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>
> --
> Paulo Zanoni
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
next prev parent reply other threads:[~2014-04-29 11:18 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-07 16:32 [PATCH 00/24] drm/i915: Two part watermark update for ILK+ ville.syrjala
2014-03-07 16:32 ` [PATCH 01/24] drm/i915: Don't read sprite LP2+ registers on ILK/SNB ville.syrjala
2014-04-04 21:35 ` Paulo Zanoni
2014-04-05 15:19 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 02/24] drm/i915: Add some more tracked state to intel_pipe_wm ville.syrjala
2014-04-07 14:14 ` Paulo Zanoni
2014-04-29 11:18 ` Daniel Vetter [this message]
2014-04-29 11:20 ` Daniel Vetter
2014-04-29 12:34 ` Paulo Zanoni
2014-04-29 13:57 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 03/24] drm/i915: Skip watermark merging for inactive pipes ville.syrjala
2014-04-07 16:23 ` Paulo Zanoni
2014-03-07 16:32 ` [PATCH 04/24] drm/i916: Refactor WM register maximums ville.syrjala
2014-04-07 16:34 ` Paulo Zanoni
2014-04-09 12:22 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 05/24] drm/i915: Merge LP1+ watermarks in safer way ville.syrjala
2014-04-23 19:13 ` Paulo Zanoni
2014-04-23 20:28 ` Ville Syrjälä
2014-04-28 12:44 ` [PATCH 05.1/24] drm/i915: Make sure computed watermarks never overflow the registers ville.syrjala
2014-04-28 12:44 ` [PATCH v2 05.2/24] drm/i915: Merge LP1+ watermarks in safer way ville.syrjala
2014-04-28 21:35 ` Paulo Zanoni
2014-04-28 21:23 ` [PATCH 05.1/24] drm/i915: Make sure computed watermarks never overflow the registers Paulo Zanoni
2014-03-07 16:32 ` [PATCH 06/24] drm/i915: Disable/enable planes as the first/last thing during modeset on ILK+ ville.syrjala
2014-04-07 19:51 ` Paulo Zanoni
2014-04-15 21:23 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 07/24] drm/i915: Remove useless checks from primary enable/disable ville.syrjala
2014-03-07 21:29 ` Daniel Vetter
2014-03-10 11:20 ` Ville Syrjälä
2014-03-10 11:57 ` Daniel Vetter
2014-04-07 20:04 ` Paulo Zanoni
2014-04-28 12:53 ` [PATCH v2 " ville.syrjala
2014-04-28 21:39 ` Paulo Zanoni
2014-04-30 11:28 ` Chris Wilson
2014-04-30 11:40 ` Ville Syrjälä
2014-04-30 11:43 ` Chris Wilson
2014-04-30 12:34 ` Daniel Vetter
2014-04-30 14:43 ` [PATCH] drm/i915: Make primary_enabled match the actual hardware state ville.syrjala
2014-04-30 16:01 ` Chris Wilson
2014-03-07 16:32 ` [PATCH 08/24] drm/i915: Shuffle wait_for_vblank out of primary_enable/disable funcs ville.syrjala
2014-04-07 20:27 ` Paulo Zanoni
2014-04-08 18:55 ` Ville Syrjälä
2014-04-29 14:00 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 09/24] drm/i915: Keep vblank interrupts enabled while enabling/disabling planes ville.syrjala
2014-04-07 21:21 ` Paulo Zanoni
2014-04-08 18:19 ` Ville Syrjälä
2014-04-28 12:58 ` [PATCH v2 " ville.syrjala
2014-04-28 21:42 ` Paulo Zanoni
2014-04-29 14:04 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 10/24] drm/i915: Leave interrupts enabled while disabling crtcs during suspend ville.syrjala
2014-04-24 13:33 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 11/24] drm/i915: Check hw vs. sw watermark state after programming ville.syrjala
2014-04-23 21:16 ` Paulo Zanoni
2014-04-29 12:54 ` Ville Syrjälä
2014-03-07 16:32 ` [PATCH 12/24] drm/i915: Refactor ilk_validate_pipe_wm() ville.syrjala
2014-04-23 21:23 ` Paulo Zanoni
2014-03-07 16:32 ` [PATCH 13/24] drm/i915: Refactor ilk_update_wm ville.syrjala
2014-04-23 21:31 ` Paulo Zanoni
2014-03-07 16:32 ` [PATCH 14/24] drm/i915: Add dev_priv->wm.mutex ville.syrjala
2014-04-23 21:47 ` Paulo Zanoni
2014-04-24 8:07 ` Ville Syrjälä
2014-03-07 16:32 ` [PATCH 15/24] drm/i915: Add vblank based delayed watermark update mechanism ville.syrjala
2014-03-07 16:32 ` [PATCH 16/24] drm/i915: Split watermark programming into pre and post steps ville.syrjala
2014-03-07 16:32 ` [PATCH 17/24] drm/i915: Actually perform the watermark update in two phases ville.syrjala
2014-03-07 16:32 ` [PATCH 18/24] drm/i915: Wait for watermark updates to finish before disabling a pipe ville.syrjala
2014-03-07 16:32 ` [PATCH 19/24] drm/i915: Refactor get_other_active_crtc() ville.syrjala
2014-03-07 16:32 ` [PATCH 20/24] drm/i915: Disable LP1+ watermarks while changing the number of active pipes ville.syrjala
2014-03-07 16:32 ` [PATCH 21/24] drm/i915: Keep track of who disabled LP1+ watermarks ville.syrjala
2014-03-07 16:32 ` [PATCH 22/24] drm/i915: Prefer the 5/6 DDB split when primary is disabled ville.syrjala
2014-03-07 16:32 ` [PATCH 23/24] drm/i915: Add a workaround for sprite only <-> primary only switching ville.syrjala
2014-03-07 21:32 ` Daniel Vetter
2014-03-07 16:32 ` [PATCH 24/24] drm/i915: Don't disable LP1+ watermarks for every frame when scaled ville.syrjala
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=20140429111850.GP32404@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
--cc=przanoni@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.