Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp626077img; Fri, 22 Mar 2019 05:25:30 -0700 (PDT) X-Google-Smtp-Source: APXvYqxePNv6SL7UXM1gMzOv5aymohCH5vcHr8ddwQXehbPUFLi2XDlMygatObK6UnNz2fegGdnC X-Received: by 2002:a63:c204:: with SMTP id b4mr8554627pgd.335.1553257530515; Fri, 22 Mar 2019 05:25:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553257530; cv=none; d=google.com; s=arc-20160816; b=FQ1qDjOzuoLHW8qw3Hd11FwqPRyoHZV8jk9h4UY2i55BA6OwKlYanNjDy2rOrIOJMT ZQAPkx38v6r5rfpXZLAxbxFPejjchlVVxVdLON7Y0pKDqbvLqR06xHWdfvxJnvNbEdlz pHTSI4eQlxQCU7cK1WURDLOdZkUgE4RgciFT93fBFiJUJba0C85a4h3XMNFUPEVoJoy3 9h/5QrOBEmygIvTlD69XNvWDWHLlWBWaeyhQ+pgcHQSnsgb8nl5+eEMaF+KiZ65425G9 Lez7+YWBm35lmqr+TW6tiUWI9RrXS+XfTP+6oOztZVkdKe+sGE2ZxYvhOuACIKXIKfoC ibOw== 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=vUnY85sZbcTrr2aaIc5xQxuXeaS/2ymltQTSiTNKxCQ=; b=q0NhTTlr63DIpKNhrGzcbd/N2lkI+GkJs2jo58fqlP5sQmPw6UHAJywAxMyoGj/b0P 6LbW4RSIkCwhrYL9uCkdeHwbSkuy2dCKUkt1idp30qZwXFdfhkDYhagoS19Prv9CtncY AC4oLpzKxaA1gAuPAtAkk2iBcmqnZmaqzdy/fXGjb3ZpKahiIjTeFmkIZP64G2Y3w5Qi bUw3wlg3olhsQ3Vib36dNn7VetPSTcmt25sEE0OK4Z6EDvIH/cJJWGKBTSp2sY126PoJ gjpStiArdTUspxe5jZjqzcf9L8NQyGht3I9zbNbGOW/hfG2sXDupZEc7qKTv5eZ5Ox9v 5OiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qee7JC5p; 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 e16si6121709pgv.436.2019.03.22.05.25.15; Fri, 22 Mar 2019 05:25:30 -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=qee7JC5p; 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 S2391122AbfCVMXW (ORCPT + 99 others); Fri, 22 Mar 2019 08:23:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:34736 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391110AbfCVMXR (ORCPT ); Fri, 22 Mar 2019 08:23:17 -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 E121A218B0; Fri, 22 Mar 2019 12:23:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553257396; bh=0O5L8f+Y9T237irFx86v0acqpxfWQARuFfyRel8Cg9c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qee7JC5pQc3EQ9yX803CQRfzSzHE+n2+w4yNEGPOcIFNDqssGLb5nxiBJ0133DScQ dxxpbw8O8M0Xnim1u4vCEbRXQLuRxoceAOYnOeZInPOJ5epBnPAK3+PchPkkfYhnDi 0h8thehk6wG9FfegkEJAaejUH/W5TWLOgqJuT9kQ= 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 5.0 219/238] media: imx: csi: Stop upstream before disabling IDMA channel Date: Fri, 22 Mar 2019 12:17:18 +0100 Message-Id: <20190322111311.205522747@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111258.383569278@linuxfoundation.org> References: <20190322111258.383569278@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 5.0-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 @@ -725,10 +725,16 @@ static int csi_start(struct csi_priv *pr output_fi = &priv->frame_interval[priv->active_output_pad]; + /* 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); @@ -756,6 +762,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; } @@ -771,6 +779,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); @@ -938,23 +949,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: