[Intel-gfx] [PATCH 33/42] drm/i915: remove crtc->active tracking completely
Daniel Vetter
daniel at ffwll.ch
Tue May 12 10:08:44 PDT 2015
On Tue, May 12, 2015 at 06:01:40PM +0100, Daniel Stone wrote:
> Hi,
>
> On 12 May 2015 at 17:57, Daniel Vetter <daniel at ffwll.ch> wrote:
> > On Tue, May 12, 2015 at 04:07:14PM +0200, Maarten Lankhorst wrote:
> >> Op 12-05-15 om 12:03 schreef Daniel Vetter:
> >> > On Mon, May 11, 2015 at 4:25 PM, Maarten Lankhorst
> >> > <maarten.lankhorst at linux.intel.com> wrote:
> >> >> @@ -11953,16 +11930,14 @@ check_shared_dpll_state(struct drm_device *dev)
> >> >> for_each_intel_crtc(dev, crtc) {
> >> >> if (crtc->base.state->active && intel_crtc_to_shared_dpll(crtc) == pll)
> >> >> - enabled_crtcs++;
> >> >> - if (crtc->active && intel_crtc_to_shared_dpll(crtc) == pll)
> >> >> active_crtcs++;
> >> >> }
> >> >> I915_STATE_WARN(pll->active != active_crtcs,
> >> >> "pll active crtcs mismatch (expected %i, found %i)\n",
> >> >> pll->active, active_crtcs);
> >> >> - I915_STATE_WARN(hweight32(pll->config.crtc_mask) != enabled_crtcs,
> >> >> + I915_STATE_WARN(hweight32(pll->config.crtc_mask) != active_crtcs,
> >> >> "pll enabled crtcs mismatch (expected %i, found %i)\n",
> >> >> - hweight32(pll->config.crtc_mask), enabled_crtcs);
> >> >> + hweight32(pll->config.crtc_mask), active_crtcs);
> >> >
> >> > Missed one: Why do you remove this? Imo that's a fairly crucial
> >> > consistency check.
> >> > -Daniel
> >> It's not removed, but crtc->active is the same as crtc->base.state->active now. The check still works as intended. :-)
> >
> > Oh there's a confusion (maybe from ealier patches?). You derive
> > enabled_crtcs from state->active, but it should be derived from
> > state->enable. That's at least the case in current -nightly.
> >
> > And active_crtcs should be derived from state->active ofc (currently
> > looking at intel_crtc->active). If I'm piecing the patches together the
> > active_crtcs case gets removed and the enabled_crtcs is mixing things up
> > after your series. We definitely need both of them still I think.
>
> I'll freely admit to getting lost in the maze, but is it that
> crtc->base.state->active / enabled_crtcs is testing the to-be-enabled
> set (pending state), and crtc->active / active_crtcs is testing the
> was-previously-enabled set (old state)? If so, these checks are indeed
> different, but it's kind of hard to tell. And we'd need to capture the
> entire previous state to pass in. Maybe those would be better as two
> separate checks; one before we swap the state, and one after?
This is state config cross-checks done at the end, so never looks at
transitions but only at snapshots.
enabled = logically enabled, i.e. resources are reserved to make sure dpms
on will succeed
active = hw actually running
And active always implies enabled.
We have that distinction both on the crtc and by necessity also on the
dplls used by them. But somehow that got a bit mixed up in Maarten's
series here. Current -nightly still keeps them nicely separate.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the Intel-gfx
mailing list