lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
 <TY3PR01MB1134683A9785850743F26CF0C8665A@TY3PR01MB11346.jpnprd01.prod.outlook.com>
Date: Mon, 26 May 2025 09:24:04 +0000
From: Biju Das <biju.das.jz@...renesas.com>
To: Tommaso Merciai <tommaso.merciai.xr@...renesas.com>, Tommaso Merciai
	<tomm.merciai@...il.com>
CC: "linux-renesas-soc@...r.kernel.org" <linux-renesas-soc@...r.kernel.org>,
	Andrzej Hajda <andrzej.hajda@...el.com>, Neil Armstrong
	<neil.armstrong@...aro.org>, Robert Foss <rfoss@...nel.org>, laurent.pinchart
	<laurent.pinchart@...asonboard.com>, Jonas Karlman <jonas@...boo.se>, Jernej
 Skrabec <jernej.skrabec@...il.com>, Maarten Lankhorst
	<maarten.lankhorst@...ux.intel.com>, Maxime Ripard <mripard@...nel.org>,
	Thomas Zimmermann <tzimmermann@...e.de>, David Airlie <airlied@...il.com>,
	Simona Vetter <simona@...ll.ch>, Dmitry Baryshkov
	<dmitry.baryshkov@....qualcomm.com>, Douglas Anderson
	<dianders@...omium.org>, Adam Ford <aford173@...il.com>, Jesse Van Gavere
	<jesseevg@...il.com>, "dri-devel@...ts.freedesktop.org"
	<dri-devel@...ts.freedesktop.org>, "linux-kernel@...r.kernel.org"
	<linux-kernel@...r.kernel.org>
Subject: RE: [PATCH] drm/bridge: adv7511: Do not merge adv7511_mode_set() with
 atomic_enable()

Hi Tommaso,

Thanks for the patch.

> -----Original Message-----
> From: Tommaso Merciai <tommaso.merciai.xr@...renesas.com>
> Sent: 26 May 2025 09:55
> Subject: [PATCH] drm/bridge: adv7511: Do not merge adv7511_mode_set() with atomic_enable()
> 
> After adv7511_mode_set() was merged into .atomic_enable(), only the native resolution is working when
> using modetest.
> 
> This is caused by incorrect timings: adv7511_mode_set() must not be merged into .atomic_enable().
> 
> Move adv7511_mode_set() back to the .mode_set() callback in drm_bridge_funcs to restore correct
> behavior.
> 
> Fixes: 0a9e2f0a6466 ("drm/bridge: adv7511: switch to the HDMI connector helpers")
> Reported-by: Biju Das <biju.das.jz@...renesas.com>
> Closes: https://lore.kernel.org/all/aDB8bD6cF7qiSpKd@tom-desktop/
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@...renesas.com>

Reviewed-by: Biju Das <biju.das.jz@...renesas.com>

The modetest started working again on RZ/V2L SMARC EVK connected to ADV7535.

So,

Tested-by: Biju Das <biju.das.jz@...renesas.com>

Cheers,
Biju


> ---
>  drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 22 ++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 8b7548448615..7a874bf645af 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -647,6 +647,7 @@ adv7511_detect(struct adv7511 *adv7511)  }
> 
>  static void adv7511_mode_set(struct adv7511 *adv7511,
> +			     const struct drm_display_mode *mode,
>  			     const struct drm_display_mode *adj_mode)  {
>  	unsigned int low_refresh_rate;
> @@ -717,11 +718,11 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
>  			vsync_polarity = 1;
>  	}
> 
> -	if (drm_mode_vrefresh(adj_mode) <= 24)
> +	if (drm_mode_vrefresh(mode) <= 24)
>  		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_24HZ;
> -	else if (drm_mode_vrefresh(adj_mode) <= 25)
> +	else if (drm_mode_vrefresh(mode) <= 25)
>  		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_25HZ;
> -	else if (drm_mode_vrefresh(adj_mode) <= 30)
> +	else if (drm_mode_vrefresh(mode) <= 30)
>  		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_30HZ;
>  	else
>  		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE; @@ -743,7 +744,7 @@ static void
> adv7511_mode_set(struct adv7511 *adv7511,
>  	 * supposed to give better results.
>  	 */
> 
> -	adv7511->f_tmds = adj_mode->clock;
> +	adv7511->f_tmds = mode->clock;
>  }
> 
>  static int adv7511_connector_init(struct adv7511 *adv) @@ -795,8 +796,6 @@ static void
> adv7511_bridge_atomic_enable(struct drm_bridge *bridge,
> 
>  	adv7511_set_config_csc(adv, connector, adv->rgb);
> 
> -	adv7511_mode_set(adv, &crtc_state->adjusted_mode);
> -
>  	drm_atomic_helper_connector_hdmi_update_infoframes(connector, state);  }
> 
> @@ -821,6 +820,16 @@ adv7511_bridge_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
>  	return MODE_OK;
>  }
> 
> +static void adv7511_bridge_mode_set(struct drm_bridge *bridge,
> +				    const struct drm_display_mode *mode,
> +				    const struct drm_display_mode *adj_mode) {
> +	struct adv7511 *adv = bridge_to_adv7511(bridge);
> +
> +	/* should not be merged into atomic_enable() */
> +	adv7511_mode_set(adv, mode, adj_mode); }
> +
>  static enum drm_mode_status adv7511_bridge_mode_valid(struct drm_bridge *bridge,
>  						      const struct drm_display_info *info,
>  		const struct drm_display_mode *mode)
> @@ -917,6 +926,7 @@ static int adv7511_bridge_hdmi_write_infoframe(struct drm_bridge *bridge,  }
> 
>  static const struct drm_bridge_funcs adv7511_bridge_funcs = {
> +	.mode_set = adv7511_bridge_mode_set,
>  	.mode_valid = adv7511_bridge_mode_valid,
>  	.attach = adv7511_bridge_attach,
>  	.detect = adv7511_bridge_detect,
> --
> 2.43.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ