All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Nicolas Frattaroli" <nicolas.frattaroli@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2 05/27] drm/connector: hdmi: Add VTEM EMP generation
Date: Thu, 05 Nov 2026 16:53:42 +0000	[thread overview]
Message-ID: <sashiko-outbox-199555@kernel.org> (raw)
In-Reply-To: <20261105-vrr-limiter-uapi-v2-5-55f4215be2c2@collabora.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] drm/connector: hdmi: unpopulated adjusted_mode in hdmi_generate_emp_infoframe_vtem()
- [Medium] drm/connector: hdmi: invalid VTEM EMP state when vrr_display_mode is Off
--

commit 404c1e52433cdea0b822a43bb7471dc9ca224073
Author: Derek Foreman <derek.foreman@collabora.com>

drm/connector: hdmi: Add VTEM EMP generation

This commit adds VTEM Extended Metadata Packet (EMP) generation and state
tracking to the HDMI connector state helpers to support variable refresh
rate signalling on VRR-capable sinks.

> diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
> index c1a84e30441a6..497af307a690c 100644
> --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c
> +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
> @@ -853,6 +853,61 @@ static int hdmi_generate_hdmi_vendor_infoframe(const struct drm_connector *conne
>  	return 0;
>  }
>  
> +static int hdmi_generate_emp_infoframe_vtem(const struct drm_connector *connector,
> +					    struct drm_connector_state *conn_state)
> +{
> +	const struct drm_display_info *info = &connector->display_info;
> +	const struct drm_crtc_state *crtc_state =
> +		drm_atomic_get_crtc_state(conn_state->state, conn_state->crtc);
> +	struct drm_connector_hdmi_infoframe *infoframe =
> +		&conn_state->hdmi.infoframes.vtem;
> +	struct hdmi_emp_infoframe_vtem *vtem =
> +		&infoframe->data.vtem;
> +	const struct drm_crtc_vrr_state *vrr = &crtc_state->vrr_state;
> +	int vfront;
> +	u8 avi_vic;
> +
> +	infoframe->set = false;
> +
> +	if (!connector->hdmi.funcs->vtem.write_infoframe)
> +		return 0;
> +
> +	if (!info->hdmi.vrr_cap.supported)
> +		return 0;
> +
> +	if (conn_state->hdmi.infoframes.avi.set)
> +		avi_vic = conn_state->hdmi.infoframes.avi.data.avi.video_code;
> +	else
> +		avi_vic = 0;
> +
> +	hdmi_emp_infoframe_vtem_init(vtem);
> +
> +	switch (conn_state->vrr_display_mode) {
> +	case VRR_DISPLAY_MODE_GAME:
> +		vtem->game_vrr_en = true;
> +		vtem->m_const = !vrr->dynamic;
> +		break;
> +	case VRR_DISPLAY_MODE_OFF:
> +		break;

[Severity: Medium]
When conn_state->vrr_display_mode is VRR_DISPLAY_MODE_OFF, breaking out of
the switch allows execution to reach infoframe->set = true at the end of
hdmi_generate_emp_infoframe_vtem().

Because new_frame->set is true, write_or_clear_infoframe() in
drm_atomic_helper_connector_hdmi_update_infoframes() will call
write_infoframe() instead of clear_infoframe():

drivers/gpu/drm/display/drm_hdmi_state_helper.c:write_or_clear_infoframe() {
	if (new_frame->set)
		return write_infoframe(connector, funcs, type, new_frame);

	if (old_frame->set && !new_frame->set)
		return clear_infoframe(connector, funcs, type);
...
}

In turn, hdmi_emp_infoframe_vtem_pack() packs a VTEM packet with
Data_Set_Length hardcoded to 4 (ptr[9] = 4) while game_vrr_en,
fva_factor_m1, base_vfront, and base_refresh_rate are all 0.

Should VRR_DISPLAY_MODE_OFF return 0 with infoframe->set left as false so
that write_or_clear_infoframe() invokes clear_infoframe() to stop VTEM EMP
transmission when VRR is disabled?

> +	default:
> +		return -EINVAL;
> +	}
> +
> +	if (vtem->game_vrr_en && !avi_vic) {
> +		vtem->base_refresh_rate = drm_mode_vrefresh(&crtc_state->mode);
> +		vfront = crtc_state->adjusted_mode.crtc_vsync_start -
> +			 crtc_state->adjusted_mode.crtc_vdisplay;

[Severity: High]
Is crtc_state->adjusted_mode populated when
hdmi_generate_emp_infoframe_vtem() runs during atomic_check?

In drm_atomic_helper_check_modeset(), the connector atomic_check callbacks
(drm_atomic_helper_connector_hdmi_check() -> hdmi_generate_infoframes() ->
hdmi_generate_emp_infoframe_vtem()) run before mode_fixup() copies
new_crtc_state->mode into new_crtc_state->adjusted_mode:

drivers/gpu/drm/drm_atomic_helper.c:mode_fixup() {
	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
		if (!new_crtc_state->mode_changed &&
		    !new_crtc_state->connectors_changed)
			continue;

		drm_mode_copy(&new_crtc_state->adjusted_mode, &new_crtc_state->mode);
	}
...
}

When enabling a previously disabled CRTC with a non-CEA mode (!avi_vic) and
VRR_DISPLAY_MODE_GAME, crtc_state->adjusted_mode is still zero-initialized,
so vfront is calculated as 0. When switching modes on an already-active
CRTC, crtc_state->adjusted_mode still holds the previous mode's timings
from atomic_duplicate_state(), causing vtem->base_vfront to be computed
from the old mode (or causing atomic_check to fail with -EINVAL if the old
mode had vfront > U8_MAX).

Should this compute vfront from crtc_state->mode (or
connector_state_get_mode(conn_state)), matching how vtem->base_refresh_rate
and hdmi_validate_vrr() read the mode timings?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261105-vrr-limiter-uapi-v2-0-55f4215be2c2@collabora.com?part=5

  reply	other threads:[~2026-11-05 16:53 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-05 15:51 [PATCH v2 00/27] VRR Target Rate Limiter KMS uAPI and Implementation Nicolas Frattaroli
2026-11-05 15:51 ` Nicolas Frattaroli
2026-11-05 15:51 ` [PATCH v2 01/27] drm: Add VRR state Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:44   ` sashiko-bot
2026-11-05 15:51 ` [PATCH v2 02/27] drm/connector: add vrr_display_mode connector property Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:27   ` sashiko-bot
2026-11-05 15:51 ` [PATCH v2 03/27] video/hdmi: Add VTEM EMP packing Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:29   ` sashiko-bot
2026-11-05 15:51 ` [PATCH v2 04/27] drm/bridge: Add VTEM EMP support Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:33   ` sashiko-bot
2026-11-05 15:51 ` [PATCH v2 05/27] drm/connector: hdmi: Add VTEM EMP generation Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:53   ` sashiko-bot [this message]
2026-11-05 15:51 ` [PATCH v2 06/27] drm/crtc-helper: Add VRR helper functions Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:49   ` sashiko-bot
2026-11-05 15:51 ` [PATCH v2 07/27] drm/bridge: synopsys: Add VTEM EMP support Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 15:51 ` [PATCH v2 08/27] drm/connector: Add drm_display_info_is_vrr_capable Nicolas Frattaroli
2026-11-05 15:51   ` Nicolas Frattaroli
2026-11-05 16:58   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 09/27] drm: Add VRR target frame rate properties Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:07   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 10/27] drm/connector: Add vrr_display_{min,max} connector properties Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:08   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 11/27] drm: Implement VRR rate limiting Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:17   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 12/27] drm/rockchip: dw_hdmi_qp: Add VRR support Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:30   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 13/27] drm/rockchip: Set mode_changed on vrr_enabled change Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 14/27] drm/rockchip: vop2: Enable VRR Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:40   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 15/27] drm/edid: Parse QMS flag from HDMI SCDS Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 16/27] drm/edid: Parse QMS TFR min/max flags " Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 17/27] drm/connector: Add "Media" VRR display mode for QMS Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 18/27] video/hdmi: Add support for QMS in VTEM EMP packing Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 19/27] drm/connector: hdmi: Add QMS to VTEM EMP generation Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:45   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 20/27] drm/connector: hdmi: Add QMS state validation and computation Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:53   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 21/27] drm/rockchip: dw_hdmi_qp: Add QMS support Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 18:01   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 22/27] drm/tests: hdmi: Add "Game Mode" VRR tests Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 23/27] drm/tests: hdmi: Add Fixed/Constrained rate " Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 17:57   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 24/27] drm/tests: hdmi: Add Quick Media Switching tests Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 25/27] drm/connector: Fix docs for cnmvrr and cinemavrr members Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 15:52 ` [PATCH v2 26/27] drm/debugfs: Expose HDMI VRR in vrr_range debugfs Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 18:05   ` sashiko-bot
2026-11-05 15:52 ` [PATCH v2 27/27] drm/tests: hdmi: Add tests for vrr_display_{min,max} properties Nicolas Frattaroli
2026-11-05 15:52   ` Nicolas Frattaroli
2026-11-05 18:03   ` sashiko-bot

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=sashiko-outbox-199555@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=nicolas.frattaroli@collabora.com \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.