All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Jyri Sarha <jsarha@ti.com>
Cc: praneeth@ti.com, Daniel Vetter <daniel.vetter@ffwll.ch>,
	dri-devel@lists.freedesktop.org, peter.ujfalusi@ti.com,
	tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com,
	sam@ravnborg.org
Subject: Re: [PATCH] drm/tidss: dispc: Rewrite naive plane positioning code
Date: Mon, 10 Feb 2020 15:21:03 +0200	[thread overview]
Message-ID: <20200210132103.GS13686@intel.com> (raw)
In-Reply-To: <76f083da-e05f-9dd1-a85f-c7a3a1820f6a@ti.com>

On Sun, Feb 09, 2020 at 02:50:09PM +0200, Jyri Sarha wrote:
> On 07/02/2020 20:45, Ville Syrjälä wrote:
> > On Fri, Feb 07, 2020 at 08:26:17PM +0200, Jyri Sarha wrote:
> >> On 07/02/2020 20:18, Jyri Sarha wrote:
> >>> The old implementation of placing planes on the CRTC while configuring
> >>> the planes was naive and relied on the order in which the planes were
> >>> configured, enabled, and disabled. The situation where a plane's zpos
> >>> was changed on the fly was completely broken. The usual symptoms of
> >>> this problem was scrambled display and a flood of sync lost errors,
> >>> when a plane was active in two layers at the same time, or a missing
> >>> plane, in case when a layer was accidentally disabled.
> >>>
> >>> The rewrite takes a more straight forward approach when when HW is
> >>> concerned. The plane positioning registers are in the CRTC (or
> >>> actually OVR) register space and it is more natural to configure them
> >>> in a one go when configuring the CRTC. This is easy since we have
> >>> access to the whole atomic state when updating the CRTC configuration.
> >>>
> >>
> >> While implementing this fix it caught me by surprise that
> >> crtc->state->state (pointer up to full atomic state) is NULL when
> >> crtc_enable() or -flush() is called. So I take the plane-state directly
> >> from the plane->state and just assume that it is pointing to the same
> >> atomic state with the crtc state I am having. I that alraight?
> > 
> > IMO you should never use plane->state etc. Better pass down the
> > full atomic state everywhere. Otherwise you can never even consider
> > increasing the commit queue depth since you'd end up accessing the
> > wrong state.
> >
> 
> Ok. I did explore this a bit and it starts to look like that I have to
> store the planes' zpos values in the driver after all. Only the changes
> are available in the drm_atomic_state being commited so I have to
> maintain the full state myself. That is if I should not use plane->state
> in crtc_enable() or -flush().

You have the full old and new states around for each
crtc/plane/connector in the state. So not sure what you mean
by having only the changes available?

> 
> >>
> >> Why is the crtc->state->state NULL? Is it a bug or is there some reason
> >> to it?
> > 
> > Currently swap_state() moves that state pointer from the new obj state
> > to the old obj state, and clears the one in the new obj state. Not entirely
> > sure why, but maybe just so there isn't a stale ->state pointer hanging 
> > around in the obj->state after the swap?
> > 
> > I think a better way could be to not clobber the old obj state at
> > all, leave the new_obj_state->state alone, and just clear the ->state
> > pointer .duplicate_state(). But that would require reviewing a bunch
> > of code to find all the places where old_obj_state->state gets used
> > during the commit.
> > 
> 
> I think those places are many, since at least I did not figure out any
> other way to access the full commit behind the atomic helpers.

I haven't examined how many drivers depend on the current behaviour.
But fixing up the core/helpers should be pretty trivial.

-- 
Ville Syrjälä
Intel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2020-02-10 13:21 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-07 18:18 [PATCH] drm/tidss: dispc: Rewrite naive plane positioning code Jyri Sarha
2020-02-07 18:26 ` Jyri Sarha
2020-02-07 18:45   ` Ville Syrjälä
2020-02-09 12:50     ` Jyri Sarha
2020-02-10 13:21       ` Ville Syrjälä [this message]
2020-02-10 15:44         ` Jyri Sarha
2020-02-10 16:03           ` Ville Syrjälä
2020-02-11  9:11             ` Tomi Valkeinen
2020-02-11 13:00               ` Ville Syrjälä
2020-02-11 15:40                 ` Daniel Vetter
2020-02-11 15:41                   ` Daniel Vetter
2020-02-12 13:51                     ` Jyri Sarha

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=20200210132103.GS13686@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jsarha@ti.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=peter.ujfalusi@ti.com \
    --cc=praneeth@ti.com \
    --cc=sam@ravnborg.org \
    --cc=tomi.valkeinen@ti.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.