diff options
author | Danny Nold <dannynold@freescale.com> | 2011-05-31 14:14:57 -0500 |
---|---|---|
committer | Danny Nold <dannynold@freescale.com> | 2011-06-01 13:54:16 -0500 |
commit | 2a56c58076111472795ae48b32c2463bcca235b6 (patch) | |
tree | 3e91a20ce75a13c2ca4f4a394846ccde3cb33a0f /drivers | |
parent | 12745be3f6c1f0757d52f1ea79a2375a41887939 (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.c | 8 |
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); } |