Commit d69a5a2c authored by Yong Zhi's avatar Yong Zhi Committed by Mauro Carvalho Chehab

media: intel-ipu3: cio2: Disable and sync irq before stream off

This is to avoid pending interrupts to be handled during
stream off, in which case, the ready buffer will be removed
from buffer list, thus not all buffers can be returned to VB2
as expected. Disable CIO2 irq at cio2_hw_exit() so no new
interrupts are generated.
Signed-off-by: default avatarYong Zhi <yong.zhi@intel.com>
Signed-off-by: default avatarTianshu Qiu <tian.shu.qiu@intel.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 43df6ea0
...@@ -526,6 +526,8 @@ static void cio2_hw_exit(struct cio2_device *cio2, struct cio2_queue *q) ...@@ -526,6 +526,8 @@ static void cio2_hw_exit(struct cio2_device *cio2, struct cio2_queue *q)
unsigned int i, maxloops = 1000; unsigned int i, maxloops = 1000;
/* Disable CSI receiver and MIPI backend devices */ /* Disable CSI receiver and MIPI backend devices */
writel(0, q->csi_rx_base + CIO2_REG_IRQCTRL_MASK);
writel(0, q->csi_rx_base + CIO2_REG_IRQCTRL_ENABLE);
writel(0, q->csi_rx_base + CIO2_REG_CSIRX_ENABLE); writel(0, q->csi_rx_base + CIO2_REG_CSIRX_ENABLE);
writel(0, q->csi_rx_base + CIO2_REG_MIPIBE_ENABLE); writel(0, q->csi_rx_base + CIO2_REG_MIPIBE_ENABLE);
...@@ -1035,6 +1037,7 @@ static void cio2_vb2_stop_streaming(struct vb2_queue *vq) ...@@ -1035,6 +1037,7 @@ static void cio2_vb2_stop_streaming(struct vb2_queue *vq)
"failed to stop sensor streaming\n"); "failed to stop sensor streaming\n");
cio2_hw_exit(cio2, q); cio2_hw_exit(cio2, q);
synchronize_irq(cio2->pci_dev->irq);
cio2_vb2_return_all_buffers(q, VB2_BUF_STATE_ERROR); cio2_vb2_return_all_buffers(q, VB2_BUF_STATE_ERROR);
media_pipeline_stop(&q->vdev.entity); media_pipeline_stop(&q->vdev.entity);
pm_runtime_put(&cio2->pci_dev->dev); pm_runtime_put(&cio2->pci_dev->dev);
...@@ -1976,6 +1979,7 @@ static int __maybe_unused cio2_suspend(struct device *dev) ...@@ -1976,6 +1979,7 @@ static int __maybe_unused cio2_suspend(struct device *dev)
/* Stop stream */ /* Stop stream */
cio2_hw_exit(cio2, q); cio2_hw_exit(cio2, q);
synchronize_irq(pci_dev->irq);
pm_runtime_force_suspend(dev); pm_runtime_force_suspend(dev);
......
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