From: "Ondřej Jirman" <megous@megous.com>
To: Maxime Ripard <mripard@kernel.org>,
David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
Chen-Yu Tsai <wens@csie.org>,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm: sun8i-ui/vi: Fix layer zpos change/atomic modesetting
Date: Mon, 30 Sep 2019 17:59:37 +0200 [thread overview]
Message-ID: <20190930155937.rtvoxprayrkxodxo@core.my.home> (raw)
In-Reply-To: <20190924124054.743s3tlw5qirghxo@core.my.home>
Hi,
On Tue, Sep 24, 2019 at 02:40:54PM +0200, megous hlavni wrote:
> > > On first run of the X server, only the black screen and the layer
> > > containing the cursor is visible. Switching to console and back
> > > corrects the situation.
> > >
> > > I have dumped registers, and found out this:
> > >
> > > (In both cases there are two enabled planes, plane 1 with zpos 0 and
> > > plane 3 with zpos 1).
> > >
> > > 1) First Xorg run:
> > >
> > > 0x01101000 : 00000201
> > > 0x01101080 : 00000030
> > >
> > > BLD_FILL_COLOR_CTL: (aka SUN8I_MIXER_BLEND_PIPE_CTL)
> > > P1_EN
> > >
> > > BLD_CH_RTCTL: (aka SUN8I_MIXER_BLEND_ROUTE)
> > > P0_RTCTL channel0
> > > P1_RTCTL channel3
> > >
> > > 2) After switch to console and back to Xorg:
> > >
> > > 0x01101000 : 00000301
> > > 0x01101080 : 00000031
> > >
> > > BLD_FILL_COLOR_CTL:
> > > P1_EN and P0_EN
> > >
> > > BLD_CH_RTCTL:
> > > P0_RTCTL channel1
> > > P1_RTCTL channel3
> > >
> > > What happens is that sun8i_ui_layer_enable() function may disable
> > > blending pipes even if it is no longer assigned to its layer, because
> > > of incorrect state/zpos tracking in the driver.
> > >
> > > In particular, layer 1 is configured to zpos 0 and thus uses pipe 0.
> > > When layer 3 is enabled by X server, sun8i_ui_layer_enable() will get
> > > called with old_zpos=0 zpos=1, which will lead to disabling of pipe 0.
> > >
> > > In general this issue can happen to any layer during enable or zpos
> > > changes on multiple layers at once.
> > >
> > > To correct this we now pass previous enabled/disabled state of the
> > > layer, and pass real previous zpos of the layer to
> > > sun8i_ui_layer_enable() and rework the sun8i_ui_layer_enable() function
> > > to react to the state changes correctly. In order to not complicate
> > > the atomic_disable callback with all of the above changes, we simply
> > > remove it and implement all the chanes as part of atomic_update, which
> > > also reduces the code duplication.
> >
> > I'm not even sure why we need that old state. Can't we just reset
> > completely the whole thing and do the configuration all over again?
>
> That would be nice from a dev standpoint if we can get a complete state for all
> planes at once from DRM core, but how? DRM helper gives callbacks
> for updating individual planes with prev and new state. These individual layer
> change notifications don't map nicely to how pipes are represented in the mixer
> registers.
If anyone wants to pursue this further, feel free to. I'm not planning to
pursue this fix further, at the moment.
regards,
o.
next prev parent reply other threads:[~2019-09-30 15:59 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-14 22:03 [PATCH] drm: sun8i-ui/vi: Fix layer zpos change/atomic modesetting megous
2019-09-14 22:15 ` Ondřej Jirman
2019-09-18 14:17 ` Maxime Ripard
2019-09-18 15:23 ` Ondřej Jirman
2019-09-18 20:16 ` Maxime Ripard
2019-09-19 12:20 ` Ondřej Jirman
2019-09-19 13:12 ` Ondřej Jirman
2019-09-20 15:11 ` Maxime Ripard
2019-09-24 12:40 ` Ondřej Jirman
2019-09-30 15:59 ` Ondřej Jirman [this message]
2019-10-03 11:38 ` Maxime Ripard
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=20190930155937.rtvoxprayrkxodxo@core.my.home \
--to=megous@megous.com \
--cc=airlied@linux.ie \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mripard@kernel.org \
--cc=wens@csie.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;
as well as URLs for NNTP newsgroup(s).