Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1947100imm; Thu, 9 Aug 2018 04:58:19 -0700 (PDT) X-Google-Smtp-Source: AA+uWPwOtRw9ITxDDmAybMqMWaVDOiCAIrFzfD8x7UDZ2oPAdjca8ZfcttSgbnDBJ7/+SzSygymw X-Received: by 2002:a62:64d0:: with SMTP id y199-v6mr2063627pfb.255.1533815898995; Thu, 09 Aug 2018 04:58:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533815898; cv=none; d=google.com; s=arc-20160816; b=dmJTVLuI5DcOlEpQLpMNepokHPR7KL35vUvSYxxk+4GcLZg1MiKNP/1WBuY3NiF/d9 gznKSyz6dtmAv7liAFR2m9AOueY3chj+b54PBCr2gGjq6frRzlpNQhgAgJ7CY8aPXtoh +9sYnUb50VCxFe3V7FMV1fUWBqtVd0DcDcl3QkOOCuy76kVFVRy1O34URXTmq0QlnbEh 94cFyYrcJrzFT9FoEexj5UBWc6jrnQO6uzH/ne4W9RD5CkzUhRuOu1ykNstEKzI4+hHM YulNEGw/SCmFiPvzA7XBlLCJ9lMSyF0fyQwqKv9jxPeR1EwrZZem2KC315SGojOjli0t IqJA== 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:message-id:in-reply-to:date:references:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=NZtKWJZmI/+iULgMd76pqfONx3FfTQ36HyLoKRhah34=; b=y86pMDmIPwqUsM3xDtX71G5Izttb4fV3weqlti/GPBu+jHvenbkY5C3XclK3qDD1d9 nq8uKN/sxogGo8G8HUc26km24u3Wo2Jt9LydOKLw+6gM16n8HwLoXIpEM1ZR3kicn2w+ NlI8I9UKSmmGwyvfXUdY14yyy4gi9Zym9Mpr4nSuxhBBkb4srFgkW81zngQG04MaOx+S 6XdK6AUDrIXatsap4ltrzyMo/b/3EMhVOp9eujL/4D8W95tcWMYamPcN94o7J9r22bGt spp55UewrtqgGINDBdMmZKIJx3jevCBr7GFE2XjJdAPiPFfmPx9JhRhn01lJNNt6mmd7 KB8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="KFN6/pPC"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p14-v6si7364560pfk.275.2018.08.09.04.58.03; Thu, 09 Aug 2018 04:58:18 -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=fail header.i=@gmail.com header.s=20161025 header.b="KFN6/pPC"; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730634AbeHIOVq (ORCPT + 99 others); Thu, 9 Aug 2018 10:21:46 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:34244 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730132AbeHIOVq (ORCPT ); Thu, 9 Aug 2018 10:21:46 -0400 Received: by mail-lj1-f194.google.com with SMTP id f8-v6so4280903ljk.1; Thu, 09 Aug 2018 04:57:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=NZtKWJZmI/+iULgMd76pqfONx3FfTQ36HyLoKRhah34=; b=KFN6/pPCf92rCe/qON2TlllzIuKVdNiUiBi8oLNSG9Vva2WL9n2+Oq0qyoqQrOHRtr DP9p+C8xaEt6mwUV7MPHJyJSIu6nGv6B+d0USEPn79K6ZMT14gV1oIhP6IffE9gMTcGe SdL1gNwOBjiz0OZJijEQIO8KUccVaHIK5XERVGDnfrkvrNmT7PQ1Z3NP6EeVpx36443z yrTcO8uHa5YLtEURqpA6BT3vZudGwcAVHvTZD2TZZVzE7wAPc4ge0dSdSPIbMR6FUNTl OiuVawNqE7YdIqEQQqtvclPwj9vNz20gO5Oeo/dJB1BN/OQCJWKNsxY57U7ke3RHswUH YkkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=NZtKWJZmI/+iULgMd76pqfONx3FfTQ36HyLoKRhah34=; b=eGFKmRz3Efh8CzyN3Q+TQ08yLtSvwQwtwP/el5KHjcXsF+LtcLngO7Dhwtow/+ciyk g1sUQVThzX9xF0/bYN1vfTBoKfmaFM9t6EajZP4v7a86VxaPgI5j7wy846HuEZMfqyYV 1MbaZHxS5A91lkA5Gsp21F2i5Y/Xc6XsbtI1yh8O2jkLh8q8BWaiLN+XFYY1csJcE+hW +wkD7nqYitJIm4fz4E0q6JsMC1ppgWBk1mQGO0Zj5F5S+qaiFQ5hFWQNPtiT2NfYAKmD v1Z9D5c3mPmAgHw7FmC/r7QmvWMHK0TEd8OzCViHNCcW7EwGBz5G/0E/ibJ7qARvJPey P8qg== X-Gm-Message-State: AOUpUlF4fxyygm589BClTlzFqMaGEE2PTbYy0niTxB+fIuGfOvZvhdJJ 54ChqHvv57qs9uwsnhGPo0A= X-Received: by 2002:a2e:4103:: with SMTP id o3-v6mr1448308lja.3.1533815831254; Thu, 09 Aug 2018 04:57:11 -0700 (PDT) Received: from localhost (87-57-30-174-static.dk.customer.tdc.net. [87.57.30.174]) by smtp.gmail.com with ESMTPSA id q14-v6sm1336342lfq.7.2018.08.09.04.57.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 09 Aug 2018 04:57:10 -0700 (PDT) From: Esben Haabendal To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= Cc: linux-i2c@vger.kernel.org, Wolfram Sang , Rob Herring , Mark Rutland , Yuan Yao , Fabio Estevam , Lucas Stach , Phil Reid , Clemens Gruber , Peter Rosin , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 2/4] i2c: imx: Fix race condition in dma read References: <20180709094304.8814-1-esben.haabendal@gmail.com> <20180709094304.8814-3-esben.haabendal@gmail.com> <20180724075707.7wrqltjj54gjrl4y@pengutronix.de> Date: Thu, 09 Aug 2018 13:57:08 +0200 In-Reply-To: <20180724075707.7wrqltjj54gjrl4y@pengutronix.de> ("Uwe =?utf-8?Q?Kleine-K=C3=B6nig=22's?= message of "Tue, 24 Jul 2018 09:57:07 +0200") Message-ID: <87o9ebzraj.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Uwe Kleine-K=C3=B6nig writes: > On Mon, Jul 09, 2018 at 11:43:02AM +0200, Esben Haabendal wrote: >> From: Esben Haabendal >>=20 >> This fixes a race condition, where the DMAEN bit ends up being set after >> I2C slave has transmitted a byte following the dummy read. When that >> happens, an interrupt is generated instead, and no DMA request is genera= ted >> to kickstart the DMA read, and a timeout happens after DMA_TIMEOUT (1 se= c). >>=20 >> Fixed by setting the DMAEN bit before the dummy read. >>=20 >> Signed-off-by: Esben Haabendal >> --- >> drivers/i2c/busses/i2c-imx.c | 8 +++++--- >> 1 file changed, 5 insertions(+), 3 deletions(-) >>=20 >> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c >> index 39cfd98c7b23..d86f152176a4 100644 >> --- a/drivers/i2c/busses/i2c-imx.c >> +++ b/drivers/i2c/busses/i2c-imx.c >> @@ -668,9 +668,6 @@ static int i2c_imx_dma_read(struct imx_i2c_struct *i= 2c_imx, >> struct imx_i2c_dma *dma =3D i2c_imx->dma; >> struct device *dev =3D &i2c_imx->adapter.dev; >>=20=20 >> - temp =3D imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); >> - temp |=3D I2CR_DMAEN; >> - imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); >>=20=20 >> dma->chan_using =3D dma->chan_rx; >> dma->dma_transfer_dir =3D DMA_DEV_TO_MEM; >> @@ -810,6 +807,11 @@ static int i2c_imx_read(struct imx_i2c_struct *i2c_= imx, struct i2c_msg *msgs, bo >> if ((msgs->len - 1) || block_data) >> temp &=3D ~I2CR_TXAK; >> imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); >> + if (i2c_imx->dma && msgs->len >=3D DMA_THRESHOLD && !block_data) { >> + temp =3D imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); >> + temp |=3D I2CR_DMAEN; >> + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); >> + } > > Does this need to be a separate write to the I2CR register? Just before > the if there is temp written to this register, so probably this can be > changed to just: > > if (i2c_imx->dma && msgs->len >=3D DMA_THRESHOLD && !block_data) > temp |=3D I2CR_DMAEN; > > when moved before up one line. Sure, that is clearly better. > I don't find documentation for the LS processors where this > register is described though (and the imx family doesn't seem to support > DMA for i2c). Yes, unfortunately, I think the LS1021A reference manual requires NDA. > Other than that this looks reasonable and warrants a > > Fixes: ce1a78840ff7 ("i2c: imx: add DMA support for freescale i2c driver= ") I will add that. /Esben