summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDanny Nold <dannynold@freescale.com>2011-05-31 14:14:57 -0500
committerDanny Nold <dannynold@freescale.com>2011-06-01 13:54:16 -0500
commit2a56c58076111472795ae48b32c2463bcca235b6 (patch)
tree3e91a20ce75a13c2ca4f4a394846ccde3cb33a0f /drivers
parent12745be3f6c1f0757d52f1ea79a2375a41887939 (diff)
ENGR00144136 - EPDC fb: Add TCE underrun workaround timeout
- When synching update submission to EPDC end of frame (when tce_prevent is defined), we should wait using wait_for_completion_timeout to prevent hang/deadlock in case we don't receive completion. - Added call in IST to disable end of frame interrupt upon receiving the interrupt. Signed-off-by: Danny Nold <dannynold@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index 52910f77d17e..8d086637d13f 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -2160,7 +2160,12 @@ static void epdc_submit_work_func(struct work_struct *work)
/* Leave spinlock while waiting for EOF event */
spin_unlock_irqrestore(&fb_data->queue_lock, flags);
- wait_for_completion(&fb_data->eof_event);
+ ret = wait_for_completion_timeout(&fb_data->eof_event,
+ msecs_to_jiffies(1000));
+ if (!ret) {
+ dev_err(fb_data->dev, "Missed EOF event!\n");
+ epdc_eof_intr(false);
+ }
udelay(fb_data->eof_sync_period);
spin_lock_irqsave(&fb_data->queue_lock, flags);
@@ -2889,6 +2894,7 @@ static irqreturn_t mxc_epdc_irq_handler(int irq, void *dev_id)
/* Check if we are waiting on EOF to sync a new update submission */
if (epdc_signal_eof()) {
+ epdc_eof_intr(false);
epdc_clear_eof_irq();
complete(&fb_data->eof_event);
}