Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp646635img; Fri, 22 Mar 2019 05:51:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqxp5+rG6jghNHQQKOtDyh3sjGs0lc8YM1kjizHJseJWbTiG9hfaPblhR1sqNi9AKA/WvSnI X-Received: by 2002:a63:d30d:: with SMTP id b13mr8776150pgg.307.1553259109866; Fri, 22 Mar 2019 05:51:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553259109; cv=none; d=google.com; s=arc-20160816; b=ZFJq9fYNM0YdYXcTuw2bn6IXCB5pTX+ItaHmQaAp3MKoa159MmXvQSCOUa3qGCOkN6 xo5sMDt7kRpEEr+2697HJKu56//meDO1mF4vpElLJCol9EHqDiu1O/BjkuiTx/7LwZVD skFGwEdci7NlT+jI2h8E4Ia1OmlFL8bTvjKRMBdymWsYuDGXr80Oq02B3fWNqJTHw3Vy Z37E6GmxKtUjYLwQ5Youy9dslpkRl6e/j9iv4eP6YfyCfsnZEz6Aqwu796Lnv1nn0Xyi qqcfCjqZ2B1MBEhmWDgLsAxhpe1IDw0AeE91H/moU6inJJhIIwm1WcLJQP2VIe77qOdt Cidw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fjSdxIfdEQCoAuvppqLWSCxt7FdsrOI1zVCrddXO6YA=; b=0eNik/hXXWdrTC7575ZrlicL0JP0Dfgg+Fq161w+fWz8OR7YV1595QHu+RVUnxr1LQ QpNBp/boyQDImI3UmnqBKYguI6QSlcxd513RZVzd48yqaFsXPHmVWA9YQaoMqewgtwjp AooXzI8gkhBr66Cm69PwqnSSF7zcZeau4AUvyj3W3Hs/UxQ/ubVqpXsW68pkHCxmyJUa 0JRYicPv+MYjZglwf1SbPs/kKBSksXavY1eaSleNsG0BhAza0uh52RxgYv44SHwFC1zR t4FiNKygHELxfJ9FSG2hxCOczE/q46uNEGiyswmCmJWq0IXpKLewjCjhQlZuzpLXtLR+ wmpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mqnHMjA+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 91si7174934ply.258.2019.03.22.05.51.32; Fri, 22 Mar 2019 05:51:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mqnHMjA+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387425AbfCVLzi (ORCPT + 99 others); Fri, 22 Mar 2019 07:55:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:60206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732762AbfCVLzg (ORCPT ); Fri, 22 Mar 2019 07:55:36 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D5BCF20850; Fri, 22 Mar 2019 11:55:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553255735; bh=vOJtz6tDHvcm/yg7Tj2kNRMcelL8kmVhgnoIfWmtSTw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mqnHMjA+Bt76FrJ7edg0Ljq5uf1PsMTDZfco+vKnxWKDb5IwI+Hm+QwWSVAnascw9 mhLroaL/snZ207A3d17BEJmmJIFN3bBeLkNhWlhelYV20vOG9lWjJIMbr0XMYZ0ni4 pFuxOAtVPrH7hfbJm3OYeSsVgRSFuAd3qMUUwp7M= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Steve Longerbeam , Hans Verkuil , Mauro Carvalho Chehab Subject: [PATCH 4.14 175/183] media: imx: csi: Stop upstream before disabling IDMA channel Date: Fri, 22 Mar 2019 12:16:43 +0100 Message-Id: <20190322111254.568277103@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111241.819468003@linuxfoundation.org> References: <20190322111241.819468003@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Steve Longerbeam commit 4bc1ab41eee9d02ad2483bf8f51a7b72e3504eba upstream. Move upstream stream off to just after receiving the last EOF completion and disabling the CSI (and thus before disabling the IDMA channel) in csi_stop(). For symmetry also move upstream stream on to beginning of csi_start(). Doing this makes csi_s_stream() more symmetric with prp_s_stream() which will require the same change to fix a hard lockup. Signed-off-by: Steve Longerbeam Cc: stable@vger.kernel.org # for 4.13 and up Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Greg Kroah-Hartman --- drivers/staging/media/imx/imx-media-csi.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) --- a/drivers/staging/media/imx/imx-media-csi.c +++ b/drivers/staging/media/imx/imx-media-csi.c @@ -648,10 +648,16 @@ static int csi_start(struct csi_priv *pr usleep_range(delay_usec, delay_usec + 1000); } + /* start upstream */ + ret = v4l2_subdev_call(priv->src_sd, video, s_stream, 1); + ret = (ret && ret != -ENOIOCTLCMD) ? ret : 0; + if (ret) + return ret; + if (priv->dest == IPU_CSI_DEST_IDMAC) { ret = csi_idmac_start(priv); if (ret) - return ret; + goto stop_upstream; } ret = csi_setup(priv); @@ -679,6 +685,8 @@ fim_off: idmac_stop: if (priv->dest == IPU_CSI_DEST_IDMAC) csi_idmac_stop(priv); +stop_upstream: + v4l2_subdev_call(priv->src_sd, video, s_stream, 0); return ret; } @@ -694,6 +702,9 @@ static void csi_stop(struct csi_priv *pr */ ipu_csi_disable(priv->csi); + /* stop upstream */ + v4l2_subdev_call(priv->src_sd, video, s_stream, 0); + if (priv->dest == IPU_CSI_DEST_IDMAC) { csi_idmac_stop(priv); @@ -861,23 +872,13 @@ static int csi_s_stream(struct v4l2_subd goto update_count; if (enable) { - /* upstream must be started first, before starting CSI */ - ret = v4l2_subdev_call(priv->src_sd, video, s_stream, 1); - ret = (ret && ret != -ENOIOCTLCMD) ? ret : 0; - if (ret) - goto out; - dev_dbg(priv->dev, "stream ON\n"); ret = csi_start(priv); - if (ret) { - v4l2_subdev_call(priv->src_sd, video, s_stream, 0); + if (ret) goto out; - } } else { dev_dbg(priv->dev, "stream OFF\n"); - /* CSI must be stopped first, then stop upstream */ csi_stop(priv); - v4l2_subdev_call(priv->src_sd, video, s_stream, 0); } update_count: