mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
drm/rockchip: vop2: Leave vblank enabled after entering the PSR mode
According to the following commits: commit9d0e3cac35("drm/atomic: Allow vblank-enabled + self-refresh "disable"") commit2bdba9d4a3("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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user