From: Maxime Ripard <maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
To: Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>
Cc: Paul Kocialkowski <contact-W9ppeneeCTY@public.gmane.org>,
Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
linux-sunxi <linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>,
dri-devel
<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Subject: Re: Planes enumeration with sun4i-drm driver
Date: Fri, 26 Oct 2018 09:29:33 +0100 [thread overview]
Message-ID: <20181026082933.msm2fgysyae6a6ur@flea> (raw)
In-Reply-To: <CAKMK7uG=GcE_S9trcNft9ueLi-L9jtUYwEyTxPXB088h6ryQeg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Thu, Oct 18, 2018 at 01:45:16PM +0200, Daniel Vetter wrote:
> On Thu, Oct 18, 2018 at 12:27 PM Maxime Ripard
> <maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org> wrote:
> >
> > On Mon, Oct 15, 2018 at 04:52:04PM +0200, Daniel Vetter wrote:
> > > On Mon, Oct 15, 2018 at 10:29 AM Maxime Ripard
> > > <maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org> wrote:
> > > > On Fri, Oct 12, 2018 at 06:47:13PM +0200, Paul Kocialkowski wrote:
> > > > > I'm looking at the sun4i DRM driver these days (especially for
> > > > > mainlining the VPU tiled format support through the frontend).
> > > > >
> > > > > The way things are done currently, all the possibly-supported plane
> > > > > formats are listed in sun4i_backend_layer_formats and exposed as-is to
> > > > > userspace for every plane. However, some of these formats cannot be
> > > > > used on all planes at the same time and will be rejected when checking
> > > > > the atomic commit.
> > > > >
> > > > > I find this a bit confusing from a userspace perspective.
> > > > >
> > > > > Not all constraints can be provided to userspace (e.g. the number of
> > > > > planes we can effectively scale), but when it comes to formats, we have
> > > > > that possibility. So perhaps it would make sense to only enumerate
> > > > > formats as many times as we can support them.
> > > > >
> > > > > For instance, it could look like:
> > > > > # plane 0: primary, RGB only
> > > > > # plane 1: overlay, RGB + backend YUV formats
> > > > > # plane 2: overlay, RGB + frontend YUV formats
> > > > > # plane 3: overlay, RGB only
> > > > >
> > > > > That's not perfect either, because e.g. requesting a scaled RGB plane
> > > > > will require the frontend and thus make it impossible to use the
> > > > > frontend YUV formats that would still be described. But it feels like
> > > > > it would be closer to representing hardware capabilities than our
> > > > > current situation.
> > > >
> > > > That's really arguable. The hardware capabilities are that you can use
> > > > any of those formats or features, on any plane, *but* on only one
> > > > plane at the same time. What you describe isn't closer to it, it's
> > > > just a way to workaround the issue we are facing (ie being able to
> > > > show those constraints to userspace), and an imperfect workaround.
> > > >
> > > > > I am really not sure about the DRM subsystem policy about this, though.
> > > > > Perhaps it was already decided that it's fine to deal with everything
> > > > > at commit checking time and report more formats than the hardware can
> > > > > really handle.
> > > >
> > > > It doesn't really matter what the DRM policy is here. Any change in
> > > > the direction you suggest would be a regression from the userspace
> > > > point of view and therefore would have to be reverted.
> > >
> > > How exactly can this cause a regression? Do you have some userspace
> > > that card-codes it's allocation of planes, which would then fail here
> > > and worked beforehand?
> >
> > Would that be considered completely unlikely that someone would have
> > used the primary plane with say, an YUV format to output video to it?
> >
> > > > IIRC Weston tries to discover those constraints by brute-forcing
> > > > atomic_check and figuring out a combination that works, and we would
> > > > surely benefit some kind of API to expose composition constraints.
> > >
> > > The current hints we have is to limit the features each plane exposes.
> > > Currently there's no proposal to do stuff like "only x of y planes can
> > > do $feature" at all. So yeah, Paul's idea doesn't seem entirely out of
> > > hand to me, and for the "bug regressions" we need a concrete example
> > > of what will break. Since we're fine-tuning the drm api all the time,
> > > within the limits of what userspace expects :-)
> >
> > It's really not just a matter of formats. The scaler is also involved,
> > or the CSC.
> >
> > There's two IP's, basically, the frontend and the backend. The backend
> > has support for 4 framebuffers, and can have in input RGB. It can also
> > support YUV through an additional data path whose output can be routed
> > to one plane. So you can have one YUV plane, on any plane.
> >
> > Then comes the tiled YUV formats. They can be supported through the
> > frontend, and the frontend output can be output on any plane of the
> > backend. Except that there is just one frontend.
> >
> > Then comes the scaler. If you have a scaling factor of 2 or 4, it can
> > be done on any of the backend plane. For any other factor, this has to
> > be supported through the frontend.
> >
> > The frontend doesn't support all the formats the backend does though,
> > so you have to make sure that combination works. And then, you have to
> > make sure that you're not using the tiled YUV format and the scaler on
> > two different planes.
> >
> > And then, the CSC is also performed by the frontend. So you have to
> > throw that into the mix too.
> >
> > Last time we discussed this, before introducing support for those, at
> > XDC 2016, every one agreed that the atomic_check was the way to go. As
> > you can see above, reducing the list of formats exposed doesn't even
> > solve the issue, it just reduces part of its scope, while not
> > adressing the main issue being that we have no way from the userspace
> > to get those constraints in the first place.
>
> Ok, with that additional context I agree atomic_check is really the
> only option. I also don't think there's a way to describe this using
> hint properties, without essentially describing sun4i hardware.
>
> One option that could work here (but it's very hard to implement
> correctly and fully validate) is an atomic_check failure hint: Instead
> of just -EINVAL you get back a property + the list of possible values
> userspace should try for that property instead of the one it used.
> This might need a few iterations until it convergences, but we could
> use that to convey dynamic limits on scaling, pixel formats,
> modifiers, rotations and so on. E.g. if you've run out of YUV
> converters, you could supply a new pixel format list with only rgb
> formats. Or if you've run out of scalers update the can_scale
> property.
It looks like a pretty good idea yeah.
> But that makes atomic really complex, it would still be only a hint,
> and it definitely makes drivers a nightmare to validate and fully
> test.
I guess if we go that road, we'll want to have it tested through VKMS
and IGT.
Maxime
--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
prev parent reply other threads:[~2018-10-26 8:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-12 16:47 Planes enumeration with sun4i-drm driver Paul Kocialkowski
[not found] ` <032bb9a1511e9c89d119cd8a0cd8dbb08226e286.camel-W9ppeneeCTY@public.gmane.org>
2018-10-15 8:29 ` Maxime Ripard
2018-10-15 14:52 ` Daniel Vetter
[not found] ` <CAKMK7uHU--mbR1AQWqDB58U2pjzDSgSK+Ma3zyNEtJ4kCks+uw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-18 10:27 ` Maxime Ripard
2018-10-18 11:45 ` Daniel Vetter
[not found] ` <CAKMK7uG=GcE_S9trcNft9ueLi-L9jtUYwEyTxPXB088h6ryQeg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-26 8:29 ` Maxime Ripard [this message]
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=20181026082933.msm2fgysyae6a6ur@flea \
--to=maxime.ripard-ldxbnhwyfcjbdgjk7y7tuq@public.gmane.org \
--cc=contact-W9ppeneeCTY@public.gmane.org \
--cc=daniel-/w4YWyX8dFk@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
--cc=wens-jdAy2FN1RRM@public.gmane.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