mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Marek Vasut <marek.vasut@mailbox.org>
Cc: dri-devel@lists.freedesktop.org, David Airlie <airlied@gmail.com>,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Magnus Damm <magnus.damm@gmail.com>,
	Maxime Ripard <mripard@kernel.org>,
	Simona Vetter <simona@ffwll.ch>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>,
	linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH] drm/rcar-du: dsi: Handle both DRM_MODE_FLAG_N.SYNC and !DRM_MODE_FLAG_P.SYNC
Date: Mon, 1 Dec 2025 15:09:31 +0900	[thread overview]
Message-ID: <20251201060931.GC21943@pendragon.ideasonboard.com> (raw)
In-Reply-To: <f92e90f1-2bc3-49c2-a6e4-40dcf63cb0e1@mailbox.org>

Hi Marek,

On Tue, Nov 25, 2025 at 09:13:02PM +0100, Marek Vasut wrote:
> On 11/8/25 12:23 AM, Laurent Pinchart wrote:
> > On Sat, Nov 08, 2025 at 12:04:10AM +0100, Marek Vasut wrote:
> >> Since commit 94fe479fae96 ("drm/rcar-du: dsi: Clean up handling of DRM mode flags")
> >> the driver does not set TXVMVPRMSET0R_VSPOL_LOW and TXVMVPRMSET0R_HSPOL_LOW
> >> for modes which set neither DRM_MODE_FLAG_[PN].SYNC.
> > 
> > Could you please explain what broke ?

Sorry, I wasn't clear. I meant could you summarize the explanation in
the commit message ?

> Consider mode->flags, V-ones for simplicity:
> 
> Before 94fe479fae96 :
> 
> DRM_MODE_FLAG_PVSYNC => vprmset0r |= 0
> DRM_MODE_FLAG_NVSYNC => vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW
> Neither DRM_MODE_FLAG_[PN]VSYNC => vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW
> 
> After 94fe479fae96 :
> 
> DRM_MODE_FLAG_PVSYNC => vprmset0r |= 0
> DRM_MODE_FLAG_NVSYNC => vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW
> Neither DRM_MODE_FLAG_[PN]VSYNC => vprmset0r |= 0 <---------- This broke
> 
> The "Neither" case behavior is different. I did not realize that:
> 
> DRM_MODE_FLAG_N[HV]SYNC is not equivalent !DRM_MODE_FLAG_P[HV]SYNC
> 
> They really are not equivalent .
> 
> [...]
> 
> >>   	/* Configuration for Video Parameters, input is always RGB888 */
> >>   	vprmset0r = TXVMVPRMSET0R_BPP_24;
> >> -	if (mode->flags & DRM_MODE_FLAG_NVSYNC)
> >> +	if ((mode->flags & DRM_MODE_FLAG_NVSYNC) ||
> >> +	    !(mode->flags & DRM_MODE_FLAG_PVSYNC))
> >>   		vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW;
> > 
> > I don't think this restores the previous behaviour. You would need to
> > write
> > 
> > 	if (!(mode->flags & DRM_MODE_FLAG_PVSYNC))
> > 		vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW;
>
> This patch covers both the N[HV]SYNC and !P[HV]SYNC , so that should 
> restore the behavior to "Before" and explicitly be clear that N[HV]SYNC 
> and !P[HV]SYNC are not the same thing.

Before commit 94fe479fae96 we had

	vprmset0r = (mode->flags & DRM_MODE_FLAG_PVSYNC ?
		     TXVMVPRMSET0R_VSPOL_HIG : TXVMVPRMSET0R_VSPOL_LOW)
		  | (mode->flags & DRM_MODE_FLAG_PHSYNC ?
		     TXVMVPRMSET0R_HSPOL_HIG : TXVMVPRMSET0R_HSPOL_LOW)
		  | TXVMVPRMSET0R_CSPC_RGB | TXVMVPRMSET0R_BPP_24;

Considering the vertical sync for simplicity, this gives us

NVSYNC \ PVSYNC		0		1
 0			VSPOL_LOW	VSPOL_HIG
 1			VSPOL_LOW	VSPOL_HIG

With this patch, the code becomes

	/* Configuration for Video Parameters, input is always RGB888 */
	vprmset0r = TXVMVPRMSET0R_BPP_24;
	if ((mode->flags & DRM_MODE_FLAG_NVSYNC) ||
	    !(mode->flags & DRM_MODE_FLAG_PVSYNC))
		vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW;
	if ((mode->flags & DRM_MODE_FLAG_NHSYNC) ||
	    !(mode->flags & DRM_MODE_FLAG_PHSYNC))
		vprmset0r |= TXVMVPRMSET0R_HSPOL_LOW;

which gives us

NVSYNC \ PVSYNC		0		1
 0			VSPOL_LOW	VSPOL_HIG
 1			VSPOL_LOW	VSPOL_LOW

This is a different behaviour. Granted, we should never have both NVSYNC
and PVSYNC set together (unless I'm missing something), so the
difference in behaviour shouldn't matter. I'm fine with that if you
explain it in the commit message, however I think that writing

 	if (!(mode->flags & DRM_MODE_FLAG_PVSYNC))
 		vprmset0r |= TXVMVPRMSET0R_VSPOL_LOW;
 	if (!(mode->flags & DRM_MODE_FLAG_PHSYNC))
 		vprmset0r |= TXVMVPRMSET0R_HSPOL_LOW;

would both restore the previous behaviour in all cases, and be simpler.

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2025-12-01  6:09 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-07 23:04 Marek Vasut
2025-11-07 23:23 ` Laurent Pinchart
2025-11-25 20:13   ` Marek Vasut
2025-12-01  6:09     ` Laurent Pinchart [this message]
2025-12-02 18:18       ` Marek Vasut

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=20251201060931.GC21943@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=airlied@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=geert+renesas@glider.be \
    --cc=kieran.bingham+renesas@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=magnus.damm@gmail.com \
    --cc=marek.vasut@mailbox.org \
    --cc=mripard@kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tomi.valkeinen+renesas@ideasonboard.com \
    --cc=tzimmermann@suse.de \
    /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

all inboxes | Powered by JetHome®