mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-11-14 16:01:55 +00:00
ENGR00118712 ipuv3: add ipu channel disable timeout
Add timeout in ipu channel disable while loop. Signed-off-by: Jason Chen <b02280@freescale.com>
This commit is contained in:
@@ -1692,9 +1692,8 @@ int32_t ipu_disable_channel(ipu_channel_t channel, bool wait_for_stop)
|
||||
(g_sec_chan_en[IPU_CHAN_ID(channel)] &&
|
||||
idma_is_set(IDMAC_CHA_BUSY, sec_dma)) ||
|
||||
(g_thrd_chan_en[IPU_CHAN_ID(channel)] &&
|
||||
idma_is_set(IDMAC_CHA_BUSY, thrd_dma)) ||
|
||||
(_ipu_channel_status(channel) == TASK_STAT_ACTIVE)) {
|
||||
uint32_t ret, irq = out_dma;
|
||||
idma_is_set(IDMAC_CHA_BUSY, thrd_dma))) {
|
||||
uint32_t ret, irq = 0xffffffff;
|
||||
DECLARE_COMPLETION_ONSTACK(disable_comp);
|
||||
|
||||
if (idma_is_set(IDMAC_CHA_BUSY, out_dma))
|
||||
@@ -1708,14 +1707,22 @@ int32_t ipu_disable_channel(ipu_channel_t channel, bool wait_for_stop)
|
||||
if (idma_is_set(IDMAC_CHA_BUSY, in_dma))
|
||||
irq = in_dma;
|
||||
|
||||
if (irq == 0xffffffff) {
|
||||
dev_err(g_ipu_dev, "warning: no channel busy, break\n");
|
||||
break;
|
||||
}
|
||||
ret = ipu_request_irq(irq, disable_chan_irq_handler, 0, NULL, &disable_comp);
|
||||
if (ret < 0) {
|
||||
dev_err(g_ipu_dev, "irq %d in use\n", irq);
|
||||
break;
|
||||
} else {
|
||||
ret = wait_for_completion_timeout(&disable_comp, msecs_to_jiffies(50));
|
||||
ret = wait_for_completion_timeout(&disable_comp, msecs_to_jiffies(200));
|
||||
ipu_free_irq(irq, &disable_comp);
|
||||
if (ret == msecs_to_jiffies(50))
|
||||
if (ret == 0) {
|
||||
ipu_dump_registers();
|
||||
dev_err(g_ipu_dev, "warning: disable ipu dma channel %d during its busy state\n", irq);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user