Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp568189ybz; Fri, 24 Apr 2020 05:35:33 -0700 (PDT) X-Google-Smtp-Source: APiQypK1P5Eb7AR+0gS5p4mIxG4vuJstoyRWNRWgjgKmtatOufDW08Hp+Kg7vQFv1RBznIIy/JTg X-Received: by 2002:aa7:c5d1:: with SMTP id h17mr7014626eds.109.1587731733373; Fri, 24 Apr 2020 05:35:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587731733; cv=none; d=google.com; s=arc-20160816; b=lRhwkh+5f5ek9pX98ZfcCHjc37QEkVjF+YB/JIdq77yT5+LFKl9Vnn2PgiTMz8Noon lOPFPr7pZXmcawkV7/7hhPWSsFMoVV66ljYowObbd59OCf5ApZA8NCj7FzqP9VmzuLML MIi/iNXblMGDMQU5xvGObliyIYUFPWbSpfWdYdSjZ3i1htlzx7fhVRd8wp8vuzh/Adg2 8sgtZkyopXSKnmobBO34pazlhrqSlX8aZSOrp6b6YGtfenK4Vgrypah/xcxGaGklVMGE UGrVYRZGk/KR+SBajY7l20YiNF49txy8XzEwCWQ+69ND8lXXhD+CFibgKGvSyirdT8NW QD5w== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UkSuAwMc/FprNGaeISDognTnxyHWKcO4O0U3cBh0p5Q=; b=Nh1LRz3MhXZ26D5DX+IZdKLuxxQ2gDvmH9oUnJ76vpt/DS7lbQux906nXi/nMakhMX mG1iat9P2bH8V4u41cRTZBXX9eUI52Bh94Nh37O8bHd1bSW+G+xsKl8D6hDDkP96SlKu HKnBJBd4wqQuNJDCTn7A8SlhPW6lXC9ifdymIwkOanvyW68pAJs4bY2aUywkZQZAIvn3 kdETGXNRNtmKdijOr7WYdLjSkBv2V4UIjVismgGHmnDY4hoE2TUHoKYt4oI1naWRGgJJ 3JCOr8t8k/6UkLfwX3R73AynsKzPQTXg80YoiPoaieup+PpyfRAsUArDzoYonFxSOuhx 3J1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CCrakp+o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f3si2969306edw.598.2020.04.24.05.35.10; Fri, 24 Apr 2020 05:35:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CCrakp+o; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727919AbgDXMXS (ORCPT + 99 others); Fri, 24 Apr 2020 08:23:18 -0400 Received: from mail.kernel.org ([198.145.29.99]:52800 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727872AbgDXMXN (ORCPT ); Fri, 24 Apr 2020 08:23:13 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A7394216FD; Fri, 24 Apr 2020 12:23:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587730993; bh=/HD9MmdeIWifWlhK6G1FDWA7NHgdjdefK5EkIy2ZJyk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CCrakp+oqgOaa6fysldmxy4KTAfwwNRzwxVezEK8FVZSc9Xv/YoxLVq2Qw2LMjXOe 9uSJlMGXOuztcrrQPb23/Vj/PiPjvIJ8pTbUeC8KmjH/mDpGPXAykeX74Vz7wZQ/nb HVXmrivk0Z2JGw0Vm3jeJdjktmpBw41AQI0JfOOA= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Dmitry Osipenko , Wolfram Sang , Sasha Levin , linux-i2c@vger.kernel.org, linux-tegra@vger.kernel.org Subject: [PATCH AUTOSEL 5.6 31/38] i2c: tegra: Synchronize DMA before termination Date: Fri, 24 Apr 2020 08:22:29 -0400 Message-Id: <20200424122237.9831-31-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200424122237.9831-1-sashal@kernel.org> References: <20200424122237.9831-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dmitry Osipenko [ Upstream commit 8814044fe0fa182abc9ff818d3da562de98bc9a7 ] DMA transfer could be completed, but CPU (which handles DMA interrupt) may get too busy and can't handle the interrupt in a timely manner, despite of DMA IRQ being raised. In this case the DMA state needs to synchronized before terminating DMA transfer in order not to miss the DMA transfer completion. Signed-off-by: Dmitry Osipenko Signed-off-by: Wolfram Sang Signed-off-by: Sasha Levin --- drivers/i2c/busses/i2c-tegra.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 0daa863fb26f2..0c6dac770fc3a 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1223,6 +1223,15 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, time_left = tegra_i2c_wait_completion_timeout( i2c_dev, &i2c_dev->dma_complete, xfer_time); + /* + * Synchronize DMA first, since dmaengine_terminate_sync() + * performs synchronization after the transfer's termination + * and we want to get a completion if transfer succeeded. + */ + dmaengine_synchronize(i2c_dev->msg_read ? + i2c_dev->rx_dma_chan : + i2c_dev->tx_dma_chan); + dmaengine_terminate_sync(i2c_dev->msg_read ? i2c_dev->rx_dma_chan : i2c_dev->tx_dma_chan); -- 2.20.1