From: Stephan Gerhold <stephan@gerhold.net>
To: Maxime Ripard <mripard@kernel.org>
Cc: David Airlie <airlied@linux.ie>, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/modes: Support video parameters with only reflect option
Date: Fri, 13 Dec 2019 13:16:19 +0100 [thread overview]
Message-ID: <20191213121619.GA900@gerhold.net> (raw)
In-Reply-To: <20191213093950.2og36ohatf4jipd7@gilmour.lan>
On Fri, Dec 13, 2019 at 10:39:50AM +0100, Maxime Ripard wrote:
> Hi Stephan,
>
> On Wed, Dec 11, 2019 at 08:08:39PM +0100, Stephan Gerhold wrote:
> > On Wed, Dec 11, 2019 at 07:10:46PM +0100, Maxime Ripard wrote:
> > > On Tue, Dec 10, 2019 at 11:42:37AM +0100, Stephan Gerhold wrote:
> > > > On Tue, Dec 10, 2019 at 11:20:46AM +0100, Maxime Ripard wrote:
> > > > > Hi,
> > > > >
> > > > > On Mon, Dec 09, 2019 at 07:32:54PM +0100, Stephan Gerhold wrote:
> > > > > > At the moment, video mode parameters like video=540x960,reflect_x,
> > > > > > (without rotation set) are silently ignored.
> > > > > >
> > > > > > One of the reasons for this is that the calculation that
> > > > > > combines the panel_orientation with cmdline->rotation_reflection
> > > > > > does not handle the case when cmdline->rotation_reflection does
> > > > > > not have any rotation set.
> > > > > > (i.e. cmdline->rotation_reflection & DRM_MODE_ROTATE_MASK == 0)
> > > > > >
> > > > > > Example:
> > > > > > *rotation = DRM_MODE_ROTATE_0 (no panel_orientation)
> > > > > > cmdline->rotation_reflection = DRM_MODE_REFLECT_X (video=MODE,reflect_x)
> > > > > >
> > > > > > The current code does:
> > > > > > panel_rot = ilog2(*rotation & DRM_MODE_ROTATE_MASK);
> > > > > > cmdline_rot = ilog2(cmdline->rotation_reflection & DRM_MODE_ROTATE_MASK);
> > > > > > sum_rot = (panel_rot + cmdline_rot) % 4;
> > > > > >
> > > > > > and therefore:
> > > > > > panel_rot = ilog2(DRM_MODE_ROTATE_0) = ilog2(1) = 0
> > > > > > cmdline_rot = ilog2(0) = -1
> > > > > > sum_rot = (0 + -1) % 4 = -1 % 4 = 3
> > > > > > ...
> > > > > > *rotation = DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X
> > > > > >
> > > > > > So we incorrectly generate DRM_MODE_ROTATE_270 in this case.
> > > > > > To prevent cmdline_rot from becoming -1, we need to treat
> > > > > > the rotation as DRM_MODE_ROTATE_0.
> > > > > >
> > > > > > On the other hand, there is no need to go through that calculation
> > > > > > at all if no rotation is set in rotation_reflection.
> > > > > > A simple XOR is enough to combine the reflections.
> > > > > >
> > > > > > Finally, also allow DRM_MODE_ROTATE_0 in the if statement below.
> > > > > > DRM_MODE_ROTATE_0 means "no rotation" and should therefore not
> > > > > > require any special handling (e.g. specific tiling format).
> > > > > >
> > > > > > This makes video parameters with only reflect option work correctly.
> > > > > >
> > > > > > Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
> > > > >
> > > > > Thanks for that commit message.
> > > > >
> > > > > Can you also add a selftest to make sure we don't get a regression in
> > > > > the future?
> > > >
> > > > Can you explain how/where I would add a test for drm_client_rotation()
> > > > in drm_client_modeset.c? I'm not familiar with selftests to be honest.
> > > >
> > > > I found test-drm_cmdline_parser.c but that seems to cover only the
> > > > cmdline parsing (which is working correctly already).
> > >
> > > The cmdline here is the kernel command line. You were mentionning in
> > > your commit log that video=540x960,reflect_x was broken?
> > >
> >
> > The parameter is parsed correctly and placed into connector->cmdline_mode.
> > Therefore, not the *parsing* is broken, only the way we try to apply
> > and merge them with the panel orientation in drm_client_modeset.c.
> >
> > There are existing test cases for the parsing of parameters similar to
> > video=540x960,reflect_x, see drm_cmdline_test_hmirror()
> > in the aforementioned test file.
> >
> > Maybe my commit message was not as clear as I hoped :)
>
> Ah, I see what you meant by "silently ignored" now :)
>
> Yeah, maybe we can change that by "not taken into account when
> applying the mode" or something like that?
Sure, I will try to clarify it for v2.
Anything else I should change?
Thanks,
Stephan
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-12-13 21:44 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-09 18:32 [PATCH] drm/modes: Support video parameters with only reflect option Stephan Gerhold
2019-12-10 10:20 ` Maxime Ripard
2019-12-10 10:42 ` Stephan Gerhold
2019-12-11 18:10 ` Maxime Ripard
2019-12-11 19:08 ` Stephan Gerhold
2019-12-13 9:39 ` Maxime Ripard
2019-12-13 12:16 ` Stephan Gerhold [this message]
2019-12-16 16:26 ` 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=20191213121619.GA900@gerhold.net \
--to=stephan@gerhold.net \
--cc=airlied@linux.ie \
--cc=dri-devel@lists.freedesktop.org \
--cc=mripard@kernel.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 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.