drm/rockchip: vop2: Leave vblank enabled after entering the PSR mode

According to the following commits:
commit 9d0e3cac35 ("drm/atomic: Allow vblank-enabled + self-refresh "disable"")
commit 2bdba9d4a3 ("drm/rockchip: vop: Leave vblank enabled in self-refresh")

It is better to leave vblank enabled after entering the PSR mode, in
order to ensure that the vblank APIs (like DRM_IOCTL_WAIT_VBLANK) can
work in PSR mode. User space is not aware when the display system is
already in PSR mode, so this appears to be an API violation.

Without this patch, there may be a warning according to the following
check in drivers/gpu/drm/drm_atomic_helper.c:

static void
disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
{
......
		ret = drm_crtc_vblank_get(crtc);
		/*
		 * Self-refresh is not a true "disable"; ensure vblank remains
		 * enabled.
		 */
		if (new_crtc_state->self_refresh_active)
			WARN_ONCE(ret != 0,
				  "driver disabled vblank in self-refresh\n");
		else
			WARN_ONCE(ret != -EINVAL,
				  "driver forgot to call drm_crtc_vblank_off()\n");
		if (ret == 0)
			drm_crtc_vblank_put(crtc);
......
}

Change-Id: I95ee15864c1dfa1045c41c7a9ed2985bb6107f2b
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
This commit is contained in:
Damon Ding
2025-04-10 15:38:03 +08:00
committed by Tao Huang
parent c190cb7219
commit 41f6f64858

View File

@@ -5593,7 +5593,6 @@ static void vop2_crtc_atomic_enter_psr(struct drm_crtc *crtc, struct drm_crtc_st
vop2_cfg_done(crtc);
vop2_wait_for_fs_by_done_bit_status(vp);
drm_crtc_vblank_off(crtc);
if (hweight8(vop2->active_vp_mask) == 1) {
u32 adjust_aclk_rate = 0;
u32 htotal = (VOP_MODULE_GET(vop2, vp, htotal_pw) >> 16) & 0xffff;
@@ -5623,7 +5622,6 @@ static void vop2_crtc_atomic_exit_psr(struct drm_crtc *crtc, struct drm_crtc_sta
struct vop2_win *win;
unsigned long enabled_win_mask = vp->enabled_win_mask;
drm_crtc_vblank_on(crtc);
if (vop2->aclk_rate_reset)
clk_set_rate(vop2->aclk, vop2->aclk_current_freq);
vop2->aclk_rate_reset = false;