Commit acff4165 authored by Wen He's avatar Wen He Committed by Greg Kroah-Hartman

drm/arm/mali-dp: Add a loop around the second set CVAL and try 5 times

[ Upstream commit 6a88e0c1 ]

This patch trying to fix monitor freeze issue caused by drm error
'flip_done timed out' on LS1028A platform. this set try is make a loop
around the second setting CVAL and try like 5 times before giveing up.
Signed-off-by: default avatarWen He <wen.he_1@nxp.com>
Signed-off-by: default avatarLiviu Dudau <liviu.dudau@arm.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 2ee5cb63
...@@ -192,6 +192,7 @@ static void malidp_atomic_commit_hw_done(struct drm_atomic_state *state) ...@@ -192,6 +192,7 @@ static void malidp_atomic_commit_hw_done(struct drm_atomic_state *state)
{ {
struct drm_device *drm = state->dev; struct drm_device *drm = state->dev;
struct malidp_drm *malidp = drm->dev_private; struct malidp_drm *malidp = drm->dev_private;
int loop = 5;
malidp->event = malidp->crtc.state->event; malidp->event = malidp->crtc.state->event;
malidp->crtc.state->event = NULL; malidp->crtc.state->event = NULL;
...@@ -206,8 +207,18 @@ static void malidp_atomic_commit_hw_done(struct drm_atomic_state *state) ...@@ -206,8 +207,18 @@ static void malidp_atomic_commit_hw_done(struct drm_atomic_state *state)
drm_crtc_vblank_get(&malidp->crtc); drm_crtc_vblank_get(&malidp->crtc);
/* only set config_valid if the CRTC is enabled */ /* only set config_valid if the CRTC is enabled */
if (malidp_set_and_wait_config_valid(drm) < 0) if (malidp_set_and_wait_config_valid(drm) < 0) {
/*
* make a loop around the second CVAL setting and
* try 5 times before giving up.
*/
while (loop--) {
if (!malidp_set_and_wait_config_valid(drm))
break;
}
DRM_DEBUG_DRIVER("timed out waiting for updated configuration\n"); DRM_DEBUG_DRIVER("timed out waiting for updated configuration\n");
}
} else if (malidp->event) { } else if (malidp->event) {
/* CRTC inactive means vblank IRQ is disabled, send event directly */ /* CRTC inactive means vblank IRQ is disabled, send event directly */
spin_lock_irq(&drm->event_lock); spin_lock_irq(&drm->event_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment