Skip to contentSkip to conversation

media: imx: csi: Disable CSI immediately after last EOF

PATCH Peter Seiderer 2 participants 2 messages Jan 18, 2019

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

Hello Steve,

Quoted 10 lines · Steve Longerbeam

Disable the CSI immediately after receiving the last EOF before stream off (and thus before disabling the IDMA channel).

This fixes a complete system hard lockup on the SabreAuto when streaming from the ADV7180, by repeatedly sending a stream off immediately followed by stream on:

while true; do v4l2-ctl -d4 --stream-mmap --stream-count=3; done

Quoted 8 lines

Eventually this either causes the system lockup or EOF timeouts at all subsequent stream on, until a system reset.

The lockup occurs when disabling the IDMA channel at stream off. Disabling the CSI before disabling the IDMA channel appears to be a reliable fix for the hard lockup.

Fixes 4a34ec8e470cb ("[media] media: imx: Add CSI subdev driver")

[...]

Similar lockup observed on a custom i.mx6 board, fixed locally by the following patch/workaround:

drivers/staging/media/imx/imx-media-csi.c +1 -1
index 555aa45e02e3..f04d1695f7a4 100644
@@ -560,8 +560,8 @@ static int csi_idmac_setup_channel(struct csi_priv *priv)
 static void csi_idmac_unsetup(struct csi_priv *priv,
                              enum vb2_buffer_state state)
 {
-       ipu_idmac_disable_channel(priv->idmac_ch);
        ipu_smfc_disable(priv->smfc);
+       ipu_idmac_disable_channel(priv->idmac_ch);
 
        csi_idmac_unsetup_vb2_buf(priv, state);
 }

Will test your patch the next days...

Regards,
Peter

[Sorry for missing some of the CC and Message-Id, not fully subscribed to linux-media]

maintainer
#1 lore raw

Hi Peter,

Thanks for the suggestion. My patch introduces some inconsistency in the code, and your solution fixes those issues and is much simpler. It seems the fix is to silence the video data stream entering the IDMAC channel before disabling the channel, and that can be done either by disabling the SMFC or the CSI.

I'm testing your patch on the SabreAuto reference board. If it looks good, I can either make you the author or the Suggested-by:, whichever you prefer, let me know.

Steve

Quoted 46 lines · Peter Seiderer

Hello Steve,

Quoted 9 lines · Steve Longerbeam

Disable the CSI immediately after receiving the last EOF before stream off (and thus before disabling the IDMA channel).

This fixes a complete system hard lockup on the SabreAuto when streaming from the ADV7180, by repeatedly sending a stream off immediately followed by stream on:

while true; do v4l2-ctl -d4 --stream-mmap --stream-count=3; done

Quoted 8 lines

Eventually this either causes the system lockup or EOF timeouts at all subsequent stream on, until a system reset.

The lockup occurs when disabling the IDMA channel at stream off. Disabling the CSI before disabling the IDMA channel appears to be a reliable fix for the hard lockup.

Fixes 4a34ec8e470cb ("[media] media: imx: Add CSI subdev driver")

[...]

Similar lockup observed on a custom i.mx6 board, fixed locally by the following patch/workaround:

drivers/staging/media/imx/imx-media-csi.c +1 -1
index 555aa45e02e3..f04d1695f7a4 100644
@@ -560,8 +560,8 @@ static int csi_idmac_setup_channel(struct csi_priv *priv)
  static void csi_idmac_unsetup(struct csi_priv *priv,
                               enum vb2_buffer_state state)
  {
-       ipu_idmac_disable_channel(priv->idmac_ch);
         ipu_smfc_disable(priv->smfc);
+       ipu_idmac_disable_channel(priv->idmac_ch);
 
         csi_idmac_unsetup_vb2_buf(priv, state);
  }

Will test your patch the next days...

Regards,
Peter

[Sorry for missing some of the CC and Message-Id, not fully subscribed to linux-media]