Re: [PATCH 3/3] drm/sun4i: Fix layer zpos change/atomic modesetting

From: Jernej Škrabec
Date: Thu Feb 22 2024 - 15:03:26 EST


Dne sreda, 21. februar 2024 ob 14:45:20 CET je Maxime Ripard napisal(a):
> Hi,
>
> On Fri, Feb 16, 2024 at 08:04:26PM +0100, Ondřej Jirman wrote:
> > From: Ondrej Jirman <megi@xxxxxx>
> >
> > Identical configurations of planes can lead to different (and wrong)
> > layer -> pipe routing at HW level, depending on the order of atomic
> > plane changes.
> >
> > For example:
> >
> > - Layer 1 is configured to zpos 0 and thus uses pipe 0. No other layer
> > is enabled. This is a typical situation at boot.
> >
> > - When a compositor takes over and layer 3 is enabled,
> > sun8i_ui_layer_enable() will get called with old_zpos=0 zpos=1, which
> > will lead to incorrect disabling of pipe 0 and enabling of pipe 1.
> >
> > What happens is that sun8i_ui_layer_enable() function may disable
> > blender pipes even if it is no longer assigned to its layer.
> >
> > To correct this, move the routing setup out of individual plane's
> > atomic_update into crtc's atomic_update, where it can be calculated
> > and updated all at once.
> >
> > Remove the atomic_disable callback because it is no longer needed.
> >
> > Signed-off-by: Ondrej Jirman <megi@xxxxxx>
>
> I don't have enough knowledge about the mixers code to comment on your
> patch, so I'll let Jernej review it. However, this feels to me like the
> pipe assignment is typically the sort of things that should be dealt
> with device-wide, and in atomic_check.

In DE2 and DE3.0, you cannot move planes between mixers (crtcs), because each
one is hardwired to specific mixer. Movable planes are the feature of DE3.3
and one of the pain points for upstreaming the code. Anyway, this commit only
addresses current issue of enabling and disabling planes and handling zpos.

In atomic check you can only precalculate final register values, but I don't
see any benefit doing that. I think that this code elegantly solves current
issue of enabling or disabling wrong plane in certain situations, so:

Reviewed-by: Jernej Skrabec <jernej.skrabec@xxxxxxxxx>

Note, if there is new revision, please rewrite blender regmap_update_bits()
to regmap_write(). Since there is HW issue with reads, I would like to
get rid of regmap_update_bits() calls eventually.

Best regards,
Jernej

>
> If I'm talking non-sense, it would be great to mention at least why that
> can't be an option in the commit log.
>
> Maxime
>