From: sashiko-bot@kernel.org
To: "Nicolas Frattaroli" <nicolas.frattaroli@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH RFC 11/25] drm/rockchip: vop2: Enable VRR
Date: Mon, 21 Sep 2026 16:16:56 +0000 [thread overview]
Message-ID: <20260921161656.7F0AB1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260921-vrr-limiter-uapi-v1-11-2fcd7d011646@collabora.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [High] drm/rockchip: vop2: VRR stretching breaks on commits without events
- [High] drm/rockchip: vop2: VRR functionality missing in RK3576 ISR
- [High] drm/rockchip: vop2: Cannot disable VRR due to vrr_enabled guard
- [High] drm/rockchip: vop2: vop2_vp_set_vrr_vtotal fails to restore base vtotal
--
commit dc9e1b8fad941cfe2c30467e7788b4889403d827
Author: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Date: Mon Sep 21 15:51:37 2026 +0000
drm/rockchip: vop2: Enable VRR
Use the new VRR state tracking to handle VRR front porch adjustment.
To avoid indenting too deeply, refactor the vblank handling into its own
function while at it, where scope-based cleanup helpers for the lock can
be used.
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
> index bfb3841425687..e79081c044378 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
[ ... ]
> @@ -2011,6 +2012,25 @@ static void vop2_crtc_atomic_begin(struct drm_crtc *crtc,
> vop2->ops->setup_overlay(vp);
> }
>
> +static void vop2_vp_set_vrr_vtotal(struct vop2_video_port *vp, unsigned int vtotal)
> +{
> + const u32 mask = RK3568_VP_DSP_VTOTAL_VS_END__DSP_VTOTAL |
> + RK3568_VP_DSP_VTOTAL_VS_END__IMD;
> +
> + if (!vtotal) {
> + vop2_vp_update_bits(vp, RK3568_VP_DSP_VTOTAL_VS_END,
> + RK3568_VP_DSP_VTOTAL_VS_END__IMD, 0);
> + return;
> + }
[Severity: High]
When VRR is disabled, this early return clears the IMD bit but skips
restoring the DSP_VTOTAL bits.
Because RK3568_VP_DSP_VTOTAL_VS_END is also used for normal base timing,
could leaving the DSP_VTOTAL field at its previous max_vtotal value corrupt
the base display timing and leave the refresh rate permanently stretched?
[ ... ]
> @@ -2029,6 +2049,11 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc,
>
> spin_lock_irq(&crtc->dev->event_lock);
>
> + if (crtc_state->vrr_enabled) {
> + if (drm_crtc_helper_vrr_flush(crtc_state))
> + vop2_vp_set_vrr_vtotal(vp, crtc_state->vrr_state.cur_vtotal);
> + }
[Severity: High]
If userspace disables VRR, crtc_state->vrr_enabled will be false, and this
condition will skip calling drm_crtc_helper_vrr_flush().
Since drm_crtc_helper_vrr_flush() is designed to handle the !vrr_enabled case
and return a 0 vtotal to disable VRR in hardware, doesn't guarding it here
trap the display hardware in VRR mode?
> +
> if (crtc->state->event) {
> WARN_ON(drm_crtc_vblank_get(crtc));
[ ... ]
> @@ -2371,6 +2396,30 @@ static irqreturn_t rk3576_vp_isr(int irq, void *data)
> return ret;
> }
>
> +static void vop2_vp_handle_vblank(struct vop2_video_port *vp)
> +{
> + struct drm_crtc *crtc = &vp->crtc;
> + struct vop2 *vop2 = vp->vop2;
> + u32 val;
> +
> + guard(spinlock)(&crtc->dev->event_lock);
> +
> + if (!vp->event)
> + return;
[Severity: High]
This early return bypasses the VRR vsync adjustment when no event is attached
to the commit.
If a compositor issues a commit without a vblank event (such as a cursor
update), drm_crtc_helper_vrr_flush() shrinks vtotal to base_vtotal, but the
subsequent vblank interrupt will hit this return and skip restoring the
hardware vtotal to max_vtotal.
Could this cause VRR frame stretching to fail for subsequent idle frames?
> +
> + val = vop2_readl(vop2, RK3568_REG_CFG_DONE);
> +
> + if (!(val & BIT(vp->id))) {
> + drm_crtc_send_vblank_event(crtc, vp->event);
> + vp->event = NULL;
> + drm_crtc_vblank_put(crtc);
> +
> + if (crtc->state->vrr_enabled)
> + if (drm_crtc_helper_vrr_vsync(crtc->state))
> + vop2_vp_set_vrr_vtotal(vp, crtc->state->vrr_state.cur_vtotal);
[Severity: High]
Similar to the logic in atomic_flush, preventing drm_crtc_helper_vrr_vsync()
from running when VRR is disabled might miss the transition update.
Is it intentional to skip the vsync helper when vrr_enabled is false?
> + }
> +}
> +
> static irqreturn_t vop2_isr(int irq, void *data)
> {
> struct vop2 *vop2 = data;
> @@ -2402,18 +2451,7 @@ static irqreturn_t vop2_isr(int irq, void *data)
>
> if (irqs & VP_INT_FS_FIELD) {
> drm_crtc_handle_vblank(crtc);
> - spin_lock(&crtc->dev->event_lock);
> - if (vp->event) {
> - u32 val = vop2_readl(vop2, RK3568_REG_CFG_DONE);
> -
> - if (!(val & BIT(vp->id))) {
> - drm_crtc_send_vblank_event(crtc, vp->event);
> - vp->event = NULL;
> - drm_crtc_vblank_put(crtc);
> - }
> - }
> - spin_unlock(&crtc->dev->event_lock);
> -
> + vop2_vp_handle_vblank(vp);
> ret = IRQ_HANDLED;
> }
[Severity: High]
This refactors vop2_isr() to use the new vop2_vp_handle_vblank() function
which includes the VRR updates.
Looking at rk3576_vp_isr() earlier in this file, it still uses the old inline
vblank event handling and was not updated to use vop2_vp_handle_vblank().
Does this mean VRR functionality is completely missing on RK3576 platforms, as
the hardware will never stretch frames without the vsync helper?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260921-vrr-limiter-uapi-v1-0-2fcd7d011646@collabora.com?part=11
next prev parent reply other threads:[~2026-09-21 16:16 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-21 15:51 [PATCH RFC 00/25] VRR Target Rate Limiter KMS uAPI and Implementation Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 15:51 ` [PATCH RFC 01/25] drm/edid: Add a query for vrr range Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:08 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 02/25] drm: Add VRR state Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-24 6:55 ` Vidith Madhu
2026-09-24 6:55 ` Vidith Madhu
2026-09-21 15:51 ` [PATCH RFC 03/25] drm/atomic-helper: Set mode_changed on vrr_enabled change Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:13 ` sashiko-bot
2026-09-21 21:59 ` Leo Li
2026-09-21 21:59 ` Leo Li
2026-09-22 12:53 ` Nicolas Frattaroli
2026-09-22 12:53 ` Nicolas Frattaroli
2026-09-22 13:22 ` Maxime Ripard
2026-09-22 13:22 ` Maxime Ripard
2026-09-24 6:45 ` Vidith Madhu
2026-09-24 6:45 ` Vidith Madhu
2026-09-21 22:01 ` Leo Li
2026-09-21 22:01 ` Leo Li
2026-09-21 15:51 ` [PATCH RFC 04/25] video/hdmi: Add VTEM EMP packing Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:07 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 05/25] drm/bridge: Add VTEM EMP support Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:01 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 06/25] drm/connector: hdmi: Add VTEM EMP generation Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:13 ` sashiko-bot
2026-09-25 3:48 ` Vidith Madhu
2026-09-25 3:48 ` Vidith Madhu
2026-09-25 10:42 ` Daniel Stone
2026-09-25 10:42 ` Daniel Stone
2026-09-25 11:11 ` Jani Nikula
2026-09-25 11:11 ` Jani Nikula
2026-09-26 11:03 ` Nicolas Frattaroli
2026-09-26 11:03 ` Nicolas Frattaroli
2026-09-29 18:55 ` Vidith Madhu
2026-09-29 18:55 ` Vidith Madhu
2026-09-30 7:50 ` Michel Dänzer
2026-09-30 7:50 ` Michel Dänzer
2026-09-21 15:51 ` [PATCH RFC 07/25] drm/crtc-helper: Add VRR helper functions Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:05 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 08/25] drm/bridge: synopsys: Add VTEM EMP support Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:06 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 09/25] drm/connector: Add drm_display_info_is_vrr_capable Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:04 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 10/25] drm/rockchip: dw_hdmi_qp: Add VRR support Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:09 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 11/25] drm/rockchip: vop2: Enable VRR Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:16 ` sashiko-bot [this message]
2026-09-21 15:51 ` [PATCH RFC 12/25] drm/edid: Parse CinemaVRR flag from HDMI SCDS Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:13 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 13/25] drm: Add VRR target frame rate properties Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:14 ` sashiko-bot
2026-09-21 22:23 ` Leo Li
2026-09-21 22:23 ` Leo Li
2026-09-22 15:26 ` Nicolas Frattaroli
2026-09-22 15:26 ` Nicolas Frattaroli
2026-09-25 18:42 ` Leo Li
2026-09-25 18:42 ` Leo Li
2026-09-26 12:13 ` Nicolas Frattaroli
2026-09-26 12:13 ` Nicolas Frattaroli
2026-09-28 8:10 ` Michel Dänzer
2026-09-28 8:10 ` Michel Dänzer
2026-09-29 14:34 ` Leo Li
2026-09-29 14:34 ` Leo Li
2026-09-29 16:00 ` Michel Dänzer
2026-09-29 16:00 ` Michel Dänzer
2026-09-29 18:14 ` Nicolas Frattaroli
2026-09-29 18:14 ` Nicolas Frattaroli
2026-09-29 18:24 ` Nicolas Frattaroli
2026-09-29 18:24 ` Nicolas Frattaroli
2026-09-23 9:51 ` Michel Dänzer
2026-09-23 9:51 ` Michel Dänzer
2026-09-23 9:54 ` Michel Dänzer
2026-09-23 9:54 ` Michel Dänzer
2026-09-23 14:39 ` Nicolas Frattaroli
2026-09-23 14:39 ` Nicolas Frattaroli
2026-09-24 7:01 ` Vidith Madhu
2026-09-24 7:01 ` Vidith Madhu
2026-09-24 12:10 ` Nicolas Frattaroli
2026-09-24 12:10 ` Nicolas Frattaroli
2026-09-29 19:16 ` Vidith Madhu
2026-09-29 19:16 ` Vidith Madhu
2026-09-29 19:55 ` Nicolas Frattaroli
2026-09-29 19:55 ` Nicolas Frattaroli
2026-09-29 21:05 ` Vidith Madhu
2026-09-29 21:05 ` Vidith Madhu
2026-09-29 22:21 ` Xaver Hugl
2026-09-29 22:21 ` Xaver Hugl
2026-09-21 15:51 ` [PATCH RFC 14/25] drm: Implement VRR rate limiting Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:17 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 15/25] drm/edid: Parse QMS flag from HDMI SCDS Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:18 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 16/25] drm/edid: Parse QMS TFR min/max flags " Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:19 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 17/25] drm/connector: Add "qms_enabled" drm property Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:20 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 18/25] video/hdmi: Add support for QMS in VTEM EMP packing Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 15:51 ` [PATCH RFC 19/25] drm/connector: hdmi: Add QMS to VTEM EMP generation Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 15:51 ` [PATCH RFC 20/25] drm/connector: hdmi: Add QMS state validation and computation Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 15:51 ` [PATCH RFC 21/25] drm/rockchip: dw_hdmi_qp: Add QMS support Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 15:51 ` [PATCH RFC 22/25] drm/tests: hdmi: Add "Game Mode" VRR tests Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:26 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 23/25] drm/tests: hdmi: Add Fixed/Constrained rate " Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 15:51 ` [PATCH RFC 24/25] drm/tests: hdmi: Add Quick Media Switching tests Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:26 ` sashiko-bot
2026-09-21 15:51 ` [PATCH RFC 25/25] drm/atomic: Disable VRR in helper_set_config Nicolas Frattaroli
2026-09-21 15:51 ` Nicolas Frattaroli
2026-09-21 16:26 ` 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=20260921161656.7F0AB1F000FF@smtp.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.