From: "Zanoni, Paulo R" <paulo.r.zanoni@intel.com>
To: "intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>,
"maarten.lankhorst@linux.intel.com"
<maarten.lankhorst@linux.intel.com>
Subject: Re: [PATCH v4 6/8] drm/i915: Nuke fbc members from intel_crtc->atomic, v2.
Date: Thu, 18 Feb 2016 17:17:18 +0000 [thread overview]
Message-ID: <1455815836.2576.64.camel@intel.com> (raw)
In-Reply-To: <56C1E135.20406@linux.intel.com>
Em Seg, 2016-02-15 às 15:31 +0100, Maarten Lankhorst escreveu:
> Op 12-02-16 om 14:56 schreef Zanoni, Paulo R:
> > Em Qua, 2016-02-10 às 13:49 +0100, Maarten Lankhorst escreveu:
> > > Factor out intel_fbc_supports_rotation
> > ^ not anymore
> >
> >
> > > and use it in
> > > pre_plane_update as well. This leaves intel_crtc->atomic
> > > empty, so remove it too.
> > >
> > > Changes since v1:
> > > - Add a intel_fbc_supports_rotation helper.
> > Changes since v2:
> > - No more need for rotation special-casing.
> >
> > (I suppose you also have to edit the commit title to be v3)
> >
> > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.c
> > > om>
> > > ---
> > > drivers/gpu/drm/i915/intel_display.c | 58 +++++++++++++---------
> > > ----
> > > ----------
> > > drivers/gpu/drm/i915/intel_drv.h | 15 ----------
> > > 2 files changed, 20 insertions(+), 53 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > > b/drivers/gpu/drm/i915/intel_display.c
> > > index 54be8a255f1f..00cb261c6787 100644
> > > --- a/drivers/gpu/drm/i915/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/intel_display.c
> > > @@ -4782,11 +4782,9 @@ static void intel_post_plane_update(struct
> > > intel_crtc_state *old_crtc_state)
> > > {
> > > struct intel_crtc *crtc = to_intel_crtc(old_crtc_state-
> > > > base.crtc);
> > > struct drm_atomic_state *old_state = old_crtc_state-
> > > > base.state;
> > > - struct intel_crtc_atomic_commit *atomic = &crtc->atomic;
> > > struct intel_crtc_state *pipe_config =
> > > to_intel_crtc_state(crtc->base.state);
> > > struct drm_device *dev = crtc->base.dev;
> > > - struct drm_i915_private *dev_priv = dev->dev_private;
> > > struct drm_plane *primary = crtc->base.primary;
> > > struct drm_plane_state *old_pri_state =
> > > drm_atomic_get_existing_plane_state(old_state,
> > > primary);
> > > @@ -4798,22 +4796,19 @@ static void
> > > intel_post_plane_update(struct
> > > intel_crtc_state *old_crtc_state)
> > > if (pipe_config->wm_changed && pipe_config->base.active)
> > > intel_update_watermarks(&crtc->base);
> > >
> > > - if (atomic->update_fbc)
> > > - intel_fbc_post_update(crtc);
> > > -
> > > if (old_pri_state) {
> > For a code reader that is not very familiar with all the atomic
> > history
> > and its details, it's not trivial to conclude that "if
> > (drm_atomic_get_existing_plane_state(primary))", then we're
> > updating
> > the primary plane on this atomic commit. And before this patch,
> > it's
> > much much easier to conclude that update_fbc will be true when an
> > atomic update is touching the primary plane because that's
> > explicitly
> > stated by the cod.
> >
> > So although "let's kill this redundant struct" sounds good, it
> > seems to
> > me that code clarity is going away with this patch, so I wonder if
> > the
> > benefits of the patch outweigh the downsides. Isn't there something
> > else we could do about this, such as some renaming, or adding some
> > function aliases or just extra commenting?
> >
> > > struct intel_plane_state *primary_state =
> > > to_intel_plane_state(primary->state);
> > > struct intel_plane_state *old_primary_state =
> > > to_intel_plane_state(old_pri_state);
> > >
> > > + intel_fbc_post_update(crtc);
> > > +
> > > if (primary_state->visible &&
> > > (needs_modeset(&pipe_config->base) ||
> > > !old_primary_state->visible))
> > > intel_post_enable_primary(&crtc->base);
> > > }
> > > -
> > > - memset(atomic, 0, sizeof(*atomic));
> > > }
> > >
> > > static void intel_pre_plane_update(struct intel_crtc_state
> > > *old_crtc_state)
> > > @@ -4821,7 +4816,6 @@ static void intel_pre_plane_update(struct
> > > intel_crtc_state *old_crtc_state)
> > > struct intel_crtc *crtc = to_intel_crtc(old_crtc_state-
> > > > base.crtc);
> > > struct drm_device *dev = crtc->base.dev;
> > > struct drm_i915_private *dev_priv = dev->dev_private;
> > > - struct intel_crtc_atomic_commit *atomic = &crtc->atomic;
> > > struct intel_crtc_state *pipe_config =
> > > to_intel_crtc_state(crtc->base.state);
> > > struct drm_atomic_state *old_state = old_crtc_state-
> > > > base.state;
> > > @@ -4830,17 +4824,17 @@ static void intel_pre_plane_update(struct
> > > intel_crtc_state *old_crtc_state)
> > > drm_atomic_get_existing_plane_state(old_state,
> > > primary);
> > > bool modeset = needs_modeset(&pipe_config->base);
> > >
> > > - if (atomic->update_fbc)
> > > - intel_fbc_pre_update(crtc);
> > > -
> > > if (old_pri_state) {
> > > struct intel_plane_state *primary_state =
> > > to_intel_plane_state(primary->state);
> > > struct intel_plane_state *old_primary_state =
> > > to_intel_plane_state(old_pri_state);
> > > + bool turn_off = old_primary_state->visible &&
> > > + (modeset || !primary_state->visible);
> > Not really related to the patch, but ok to keep since it's
> > trivial...
> >
> > > +
> > > + intel_fbc_pre_update(crtc);
> > >
> > > - if (old_primary_state->visible &&
> > > - (modeset || !primary_state->visible))
> > > + if (turn_off)
> > > intel_pre_disable_primary(&crtc->base);
> > > }
> > >
> > > @@ -11822,27 +11816,17 @@ int
> > > intel_plane_atomic_calc_changes(struct
> > > drm_crtc_state *crtc_state,
> > > if (visible || was_visible)
> > > pipe_config->fb_bits |= to_intel_plane(plane)-
> > > > frontbuffer_bit;
> > >
> > > - switch (plane->type) {
> > > - case DRM_PLANE_TYPE_PRIMARY:
> > > - intel_crtc->atomic.update_fbc = true;
> > > -
> > > - break;
> > > - case DRM_PLANE_TYPE_CURSOR:
> > > - break;
> > > - case DRM_PLANE_TYPE_OVERLAY:
> > > - /*
> > > - * WaCxSRDisabledForSpriteScaling:ivb
> > > - *
> > > - * cstate->update_wm was already set above, so
> > > this
> > > flag will
> > > - * take effect when we commit and program
> > > watermarks.
> > > - */
> > > - if (IS_IVYBRIDGE(dev) &&
> > > - needs_scaling(to_intel_plane_state(plane_sta
> > > te))
> > > &&
> > > - !needs_scaling(old_plane_state))
> > > - pipe_config->disable_lp_wm = true;
> > > + /*
> > > + * WaCxSRDisabledForSpriteScaling:ivb
> > > + *
> > > + * cstate->update_wm was already set above, so this flag
> > > will
> > > + * take effect when we commit and program watermarks.
> > > + */
> > > + if (plane->type == DRM_PLANE_TYPE_OVERLAY &&
> > > IS_IVYBRIDGE(dev) &&
> > > + needs_scaling(to_intel_plane_state(plane_state)) &&
> > > + !needs_scaling(old_plane_state))
> > > + pipe_config->disable_lp_wm = true;
> > >
> > > - break;
> > > - }
> > > return 0;
> > > }
> > >
> > > @@ -13241,9 +13225,6 @@ static int intel_atomic_check(struct
> > > drm_device *dev,
> > > struct intel_crtc_state *pipe_config =
> > > to_intel_crtc_state(crtc_state);
> > >
> > > - memset(&to_intel_crtc(crtc)->atomic, 0,
> > > - sizeof(struct intel_crtc_atomic_commit));
> > > -
> > > /* Catch I915_MODE_FLAG_INHERITED */
> > > if (crtc_state->mode.private_flags != crtc-
> > > >state-
> > > > mode.private_flags)
> > > crtc_state->mode_changed = true;
> > > @@ -13528,12 +13509,13 @@ static int intel_atomic_commit(struct
> > > drm_device *dev,
> > > if (!modeset)
> > > intel_pre_plane_update(to_intel_crtc_sta
> > > te(c
> > > rtc_state));
> > >
> > > - if (crtc->state->active && intel_crtc-
> > > > atomic.update_fbc)
> > > + if ((modeset || update_pipe) && crtc->state-
> > > >active)
> > Same here: not easy for me to verify things are the same now. Even
> > worse: the check for "is this atomic commit touching the primary
> > plane?" is now written in a completely different way than the one
> > introduced above. Maybe there's something we could do to make the
> > code
> > easier to read.
> No, this is called now every time when the crtc has a modeset or
> update_pipe, even with no primary plane.
> This is because atomic may set a mode without having a primary plane,
> and in that case fbc_enable may never be called.
> Seemed like a bug in the original code..
I suppose that proves my point that this code with all those similar-
but-different boolean checks is really hard to read :)
FBC can only happen when there's a primary plane, so AFAIU even if we
don't call intel_fbc_enable here because the primary is disable, we'll
end up calling it later when we enable the primary plane.
Anyway, a change in behavior like this (which was supposed to be a bug
fix) should be on its own separate patch, not hidden inside a refactor.
>
> ~Maarten
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-02-18 17:17 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-10 12:49 [PATCH v4 0/8] Kill off intel_crtc->atomic! Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 1/8] drm/i915: Pass crtc state to modeset_get_crtc_power_domains Maarten Lankhorst
2016-02-17 17:54 ` Zanoni, Paulo R
2016-02-18 9:51 ` Maarten Lankhorst
2016-02-18 13:08 ` Zanoni, Paulo R
2016-02-18 13:21 ` Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 2/8] drm/i915: Unify power domain handling Maarten Lankhorst
2016-02-17 19:54 ` Zanoni, Paulo R
2016-02-10 12:49 ` [PATCH v4 3/8] drm/i915: Kill off intel_crtc->atomic.wait_vblank, v4 Maarten Lankhorst
2016-02-17 21:20 ` Zanoni, Paulo R
2016-02-18 13:22 ` Maarten Lankhorst
2016-02-18 14:14 ` Zanoni, Paulo R
2016-02-18 14:46 ` Maarten Lankhorst
2016-02-18 17:02 ` Zanoni, Paulo R
2016-02-24 10:24 ` [PATCH v6 3/8] drm/i915: Kill off intel_crtc->atomic.wait_vblank, v6 Maarten Lankhorst
2016-02-24 14:50 ` Zanoni, Paulo R
2016-02-10 12:49 ` [PATCH v4 4/8] drm/i915: Remove update_sprite_watermarks Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 5/8] drm/i915: Remove some post-commit members from intel_crtc->atomic, v2 Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 6/8] drm/i915: Nuke fbc " Maarten Lankhorst
2016-02-12 13:56 ` Zanoni, Paulo R
2016-02-15 14:31 ` Maarten Lankhorst
2016-02-18 17:17 ` Zanoni, Paulo R [this message]
2016-02-29 9:58 ` [PATCH v4.1 6/8] drm/i915: Nuke fbc members from intel_crtc->atomic, v3 Maarten Lankhorst
2016-02-29 21:06 ` Zanoni, Paulo R
2016-03-01 8:27 ` Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 7/8] drm/i915: Do not compute watermarks on a noop Maarten Lankhorst
2016-02-18 20:51 ` Zanoni, Paulo R
2016-03-01 10:11 ` Maarten Lankhorst
2016-02-10 12:49 ` [PATCH v4 8/8] drm/i915: Remove vblank wait from hsw_enable_ips Maarten Lankhorst
2016-02-12 12:06 ` Zanoni, Paulo R
2016-02-16 10:32 ` Maarten Lankhorst
2016-03-23 13:33 ` [PATCH v5 8/8] drm/i915: Remove vblank wait from hsw_enable_ips, v2 Maarten Lankhorst
2016-03-23 14:43 ` Zanoni, Paulo R
2016-02-15 13:35 ` ✗ Fi.CI.BAT: failure for Kill off intel_crtc->atomic! (rev8) Patchwork
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=1455815836.2576.64.camel@intel.com \
--to=paulo.r.zanoni@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.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.