Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp7533028rwl; Fri, 30 Dec 2022 09:48:42 -0800 (PST) X-Google-Smtp-Source: AMrXdXvsKf/yl3Kv3JKDjZTbKOY4vMI8vTWswDD6tSjDKIsSk/pWZvPjxRBAvVn0XZgikx9nva0V X-Received: by 2002:a05:6402:914:b0:479:dc9c:1144 with SMTP id g20-20020a056402091400b00479dc9c1144mr29865480edz.24.1672422521939; Fri, 30 Dec 2022 09:48:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672422521; cv=none; d=google.com; s=arc-20160816; b=pbj3WsI58YrJBfGpSp3PMi1+l140TocUpLSLsyhISnLcs2Rt+nVhnUUbJ7WizIEVI7 clXVNdnJP8bYJrKRDpQErHVnx/JYj+U1WOtnt5WK8ecCa8ibwDWShNhxhnzZWdPqMW5y CVqxO/ud0sWpNpAL44Ax2TFlY8Nl+8rC05ElNCsG9FMIqps2YoAy/Swb7ztm8V+/Gkfs U/AWU7KtOXDbKEJTcAxnvpanViErWU7P3Bz0O+IDZXETQTuJ42X6N7F/ZskszzZhE7l/ PcmpqR2FKcb7rMNGTeIXsrZCCj4bpn+AeEcXRT6AS3cjh731OSEewIsYnYo0m9b0Jdpn cLug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=0BuMKx5fKjboQUNalr7pFUm7YObMHldsta/RM/S4twE=; b=Jwbplj6Dc6IskiUgZmY4GeJ8pGgNTL4S38bxO6Kj+xrgCbFKTGiwLTEciimaC0PPz3 20gXqMF7k8E7kU0r6GMZyqybBKoh0xkFiWmxgGIRCkqmvfmakBzqKwGCQLJPexMMeQar k+6IC1oujFlQCzOyyUu8ulP3tAkmEZha/2KcMMrPIzkglMcbImdfQuhVQp4ajm8S+Nwz S0elk7EQZ3jug9iv1C5k/9N72NQcNTNc/HOliIjUvM5y/kyf/WzqQEpllSVOIUDnClAV +lGaiAVWLy/IlCMFoEBJ3OBA52D0X6K011xXhxZk2as3LgmI+M3eqBDvHFfvw4rmFGEB aFsQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dm15-20020a05640222cf00b00475bd5f3ae7si17622880edb.102.2022.12.30.09.48.27; Fri, 30 Dec 2022 09:48:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235333AbiL3RZ1 (ORCPT + 63 others); Fri, 30 Dec 2022 12:25:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235069AbiL3RZZ (ORCPT ); Fri, 30 Dec 2022 12:25:25 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90C87FD08 for ; Fri, 30 Dec 2022 09:25:24 -0800 (PST) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBJ86-00067i-8P; Fri, 30 Dec 2022 18:25:14 +0100 Received: from ore by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1pBJ83-0004m5-TT; Fri, 30 Dec 2022 18:25:11 +0100 Date: Fri, 30 Dec 2022 18:25:11 +0100 From: Oleksij Rempel To: Francesco Dolcini Cc: Primoz Fiser , Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= , linux-kernel@vger.kernel.org, Shawn Guo , Sascha Hauer , upstream@lists.phytec.de, Marco Felsch , Oleksij Rempel , NXP Linux Team , Pengutronix Kernel Team , Fabio Estevam , linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, francesco.dolcini@toradex.com, wsa@kernel.org Subject: Re: [PATCH] i2c: imx: increase retries on arbitration loss Message-ID: <20221230172511.GB14776@pengutronix.de> References: <20221216094518.bevkg5buzu7iybfh@pengutronix.de> <20221216110227.GA12327@pengutronix.de> <20221216111308.wckibotr5d3q6ree@pengutronix.de> <5c2e0531-e7c3-1b37-35ed-c8e9795a0d18@norik.com> <41991ce2-3e88-5afc-6def-6e718d624768@norik.com> <20221230161209.GA14776@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-Accept-Language: de,en X-Accept-Content-Type: text/plain User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Dec 30, 2022 at 05:47:21PM +0100, Francesco Dolcini wrote: > On Fri, Dec 30, 2022 at 05:12:09PM +0100, Oleksij Rempel wrote: > > On Fri, Dec 30, 2022 at 03:40:58PM +0100, Francesco Dolcini wrote: > > > +Wolfram > > > > > > On Wed, Dec 28, 2022 at 09:01:46AM +0100, Primoz Fiser wrote: > > > > On 16. 12. 22 13:51, Francesco Dolcini wrote: > > > > > On Fri, Dec 16, 2022 at 01:23:29PM +0100, Primoz Fiser wrote: > > > > > > The only solid point in the thread seems to be that in that case we are not > > > > > > covering up the potential i2c hardware issues? > > > > > > > > > > I believe that in this case we should just have a warning in the kernel. > > > > > The retry potentially work-around a transient issue and we do not hide any hardware > > > > > issue at the same time. It seems an easy win-win solution. > > > > > > > > I would agree about throwing a warning message in retry case. > > > > > > > > Not sure how would it affect other i2c bus drivers using retries > 0. > > > > Retries might be pretty rare with i2c-imx but some other drivers set this to > > > > 5 for example. At least using _ratelimited printk is a must using this > > > > approach. > > > > > > Wolfram, Uwe, Oleksij > > > > > > Would it be acceptable to have a warning when we have I2C retries, and > > > with that in place enabling retries on the imx driver? > > > > > > It exists hardware that requires this to work correctly, > > > > Well, this is persistent confusion in this monolog. It will not make it > > correctly. > > > > > and at a > > > minimum setting the retry count from user space is not going to solve > > > potential issues during initial driver probe. > > > > I assume it is not clear from programmer point of view. Lets try other way: > > > > - The I2C slave could not correctly interpret the data on SDA because the SDA > > high or low-level voltages do not reach its appropriate input > > thresholds. > > > > This means: > > > > You have this: > > > > /-\ /-\ ----- 2.5Vcc > > ___/ \__/ \___ > > > > Instead of this: > > > > /-\ /-\ ----- 3.3Vcc > > / \ / \ > > ___/ \__/ \___ > > > > This is bad, because master or slave will not be able to interpret the pick level > > correctly. It may see some times 0 instead of 1. This means, what ever we are > > writing we are to the slave or reading from the slave is potentially corrupt > > and only __sometimes__ the master was able to detect it. > > > > - The I2C slave missed an SCL cycle because the SCL high or low-level voltages > > do not reach its appropriate input thresholds. > > > > This means, the bus frequency is too high for current configured or physical PCB > > designed. So, you will have different kind of corruptions and some times they > > will be detected. > > > > - The I2C slave accidently interpreted a spike etc. as an SCL cycle. > > > > This means the noise level is to high. The driver strange should be increased > > or PCB redesign should be made. May be there are more options. If not done, > > data corruption can be expected. > > > > None of this issue can be "fixed" by retries or made more "robust". > > Doing more retries means: we do what ever we do until the system was not able to > > detect the error. > > Hello Oleksij, > thanks for the detailed explanation, appreciated. > > Given that is it correct that the i2c imx driver return EAGAIN in such a > case (arbitration error)? You made it crystal clear that there is no > such thing as try again for this error, I would be inclined to prepare a > patch to fix this. > > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c > index cf5bacf3a488..a2a581c8ae07 100644 > --- a/drivers/i2c/busses/i2c-imx.c > +++ b/drivers/i2c/busses/i2c-imx.c > @@ -492,7 +492,7 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool a > /* check for arbitration lost */ > if (temp & I2SR_IAL) { > i2c_imx_clear_irq(i2c_imx, I2SR_IAL); > - return -EAGAIN; > + return -EIO; > } > > if (for_busy && (temp & I2SR_IBB)) { > Hm, good question. > In addition to that is there any valid use case of the i2c retry > mechanism? > Is possible for an I2C controller to report anything that can > be recovered with a retry? In case of multimaster bus, except of noise and signal level issues, we would have a simple conflict between masters. In this case, we should retry. Potentially, every master should use randomized pause before retrying (at last it is done by some other protocol using shared medium). Regards, Oleksij -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |