From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A489C433F5 for ; Tue, 29 Mar 2022 18:38:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240620AbiC2Skc (ORCPT ); Tue, 29 Mar 2022 14:40:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240150AbiC2Sk3 (ORCPT ); Tue, 29 Mar 2022 14:40:29 -0400 Received: from hutie.ust.cz (unknown [IPv6:2a03:3b40:fe:f0::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2B3E6401 for ; Tue, 29 Mar 2022 11:38:43 -0700 (PDT) From: =?UTF-8?q?Martin=20Povi=C5=A1er?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cutebit.org; s=mail; t=1648579115; bh=MNw6TZjQg12ilqVca1Iyk/1Sr/JwKEtEFZo4CqiuRdA=; h=From:To:Cc:Subject:Date; b=MK0FFNR/dSMhYqsYkSiQpNIza2jECdZ01Sz1FG5KrRdcROhl1cEAdsLSEG4wXdfeM eEMzqSrFbkDtDZ9SN0WP0Wmg5wGWgEy3BVWpFBv37e0G916tpdI4G+MZ3CvqY2yZzb ovpC3Ak2hp3f1boVZ3YgYRmmBggUEat5PHwD2+Dw= To: Hector Martin , Sven Peter , Michael Ellerman Cc: Alyssa Rosenzweig , Benjamin Herrenschmidt , Paul Mackerras , Jean Delvare , Olof Johansson , linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Janne Grunau , =?UTF-8?q?Martin=20Povi=C5=A1er?= Subject: [PATCH] i2c: pasemi: Wait for write xfers to finish Date: Tue, 29 Mar 2022 20:38:17 +0200 Message-Id: <20220329183817.21656-1-povik+lin@cutebit.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Wait for completion of write transfers before returning from the driver. At first sight it may seem advantageous to leave write transfers queued for the controller to carry out on its own time, but there's a couple of issues with it: * Driver doesn't check for FIFO space. * The queued writes can complete while the driver is in its I2C read transfer path which means it will get confused by the raising of XEN (the 'transaction ended' signal). This can cause a spurious ENODATA error due to premature reading of the MRXFIFO register. Adding the wait fixes some unreliability issues with the driver. There's some efficiency cost to it (especially with pasemi_smb_waitready doing its polling), but that will be alleviated once the driver receives interrupt support. Fixes: beb58aa39e6e ("i2c: PA Semi SMBus driver") Signed-off-by: Martin Povišer --- Tested on Apple's t8103 chip. To my knowledge the PA Semi controller in its pre-Apple occurences behaves the same as far as this patch is concerned. drivers/i2c/busses/i2c-pasemi-core.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/i2c/busses/i2c-pasemi-core.c b/drivers/i2c/busses/i2c-pasemi-core.c index 7728c8460dc0..9028ffb58cc0 100644 --- a/drivers/i2c/busses/i2c-pasemi-core.c +++ b/drivers/i2c/busses/i2c-pasemi-core.c @@ -137,6 +137,12 @@ static int pasemi_i2c_xfer_msg(struct i2c_adapter *adapter, TXFIFO_WR(smbus, msg->buf[msg->len-1] | (stop ? MTXFIFO_STOP : 0)); + + if (stop) { + err = pasemi_smb_waitready(smbus); + if (err) + goto reset_out; + } } return 0; -- 2.33.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8CC71C433EF for ; Tue, 29 Mar 2022 18:40:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=kpl7ajZDf1lRIdk993JOibJtrJC1rX0uqRwCksr/qHo=; b=gpFJqs25bFgwDw Fga2dqTOdFrSS7eJEvzvA0q+c3cKlLMZeidXsx2TOXx9XSTg4mDN8Yab/hKHgS7bYL89fwvJtJPfU /+SYRF9Mx2E6PYCj4Viu98k9cb1PtNGI70WnMajP1Yz1sXmKVWuhDuDK8Jm57rzX7LI7+3VJ8EwpD bt+OgvYhdpbcFtJkqNW1H1fSAz3qZCiYrJH+jzGV7YjnvO/+27rVNTJUAvP/WXExz6k529Ao2bU1+ xpjsM18c5G1/sKQqyrk8D8U8P4nEHtWgiwmefks6ew1jWdq3p4YoeP8hhSOLtwDbre5pEKSfqolno M9VpenOzH2au0GuaHQjQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nZGk0-00DFJr-50; Tue, 29 Mar 2022 18:38:52 +0000 Received: from hutie.ust.cz ([185.8.165.127]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nZGju-00DFJK-KB for linux-arm-kernel@lists.infradead.org; Tue, 29 Mar 2022 18:38:49 +0000 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cutebit.org; s=mail; t=1648579115; bh=MNw6TZjQg12ilqVca1Iyk/1Sr/JwKEtEFZo4CqiuRdA=; h=From:To:Cc:Subject:Date; b=MK0FFNR/dSMhYqsYkSiQpNIza2jECdZ01Sz1FG5KrRdcROhl1cEAdsLSEG4wXdfeM eEMzqSrFbkDtDZ9SN0WP0Wmg5wGWgEy3BVWpFBv37e0G916tpdI4G+MZ3CvqY2yZzb ovpC3Ak2hp3f1boVZ3YgYRmmBggUEat5PHwD2+Dw= To: Hector Martin , Sven Peter , Michael Ellerman Cc: Alyssa Rosenzweig , Benjamin Herrenschmidt , Paul Mackerras , Jean Delvare , Olof Johansson , linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Janne Grunau , =?UTF-8?q?Martin=20Povi=C5=A1er?= Subject: [PATCH] i2c: pasemi: Wait for write xfers to finish Date: Tue, 29 Mar 2022 20:38:17 +0200 Message-Id: <20220329183817.21656-1-povik+lin@cutebit.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220329_113847_263471_1E91ECF6 X-CRM114-Status: GOOD ( 11.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org V2FpdCBmb3IgY29tcGxldGlvbiBvZiB3cml0ZSB0cmFuc2ZlcnMgYmVmb3JlIHJldHVybmluZyBm cm9tIHRoZSBkcml2ZXIuCkF0IGZpcnN0IHNpZ2h0IGl0IG1heSBzZWVtIGFkdmFudGFnZW91cyB0 byBsZWF2ZSB3cml0ZSB0cmFuc2ZlcnMgcXVldWVkCmZvciB0aGUgY29udHJvbGxlciB0byBjYXJy eSBvdXQgb24gaXRzIG93biB0aW1lLCBidXQgdGhlcmUncyBhIGNvdXBsZSBvZgppc3N1ZXMgd2l0 aCBpdDoKCiAqIERyaXZlciBkb2Vzbid0IGNoZWNrIGZvciBGSUZPIHNwYWNlLgoKICogVGhlIHF1 ZXVlZCB3cml0ZXMgY2FuIGNvbXBsZXRlIHdoaWxlIHRoZSBkcml2ZXIgaXMgaW4gaXRzIEkyQyBy ZWFkCiAgIHRyYW5zZmVyIHBhdGggd2hpY2ggbWVhbnMgaXQgd2lsbCBnZXQgY29uZnVzZWQgYnkg dGhlIHJhaXNpbmcgb2YKICAgWEVOICh0aGUgJ3RyYW5zYWN0aW9uIGVuZGVkJyBzaWduYWwpLiBU aGlzIGNhbiBjYXVzZSBhIHNwdXJpb3VzCiAgIEVOT0RBVEEgZXJyb3IgZHVlIHRvIHByZW1hdHVy ZSByZWFkaW5nIG9mIHRoZSBNUlhGSUZPIHJlZ2lzdGVyLgoKQWRkaW5nIHRoZSB3YWl0IGZpeGVz IHNvbWUgdW5yZWxpYWJpbGl0eSBpc3N1ZXMgd2l0aCB0aGUgZHJpdmVyLiBUaGVyZSdzCnNvbWUg ZWZmaWNpZW5jeSBjb3N0IHRvIGl0IChlc3BlY2lhbGx5IHdpdGggcGFzZW1pX3NtYl93YWl0cmVh ZHkgZG9pbmcKaXRzIHBvbGxpbmcpLCBidXQgdGhhdCB3aWxsIGJlIGFsbGV2aWF0ZWQgb25jZSB0 aGUgZHJpdmVyIHJlY2VpdmVzCmludGVycnVwdCBzdXBwb3J0LgoKRml4ZXM6IGJlYjU4YWEzOWU2 ZSAoImkyYzogUEEgU2VtaSBTTUJ1cyBkcml2ZXIiKQpTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gUG92 acWhZXIgPHBvdmlrK2xpbkBjdXRlYml0Lm9yZz4KLS0tCgpUZXN0ZWQgb24gQXBwbGUncyB0ODEw MyBjaGlwLiBUbyBteSBrbm93bGVkZ2UgdGhlIFBBIFNlbWkgY29udHJvbGxlcgppbiBpdHMgcHJl LUFwcGxlIG9jY3VyZW5jZXMgYmVoYXZlcyB0aGUgc2FtZSBhcyBmYXIgYXMgdGhpcyBwYXRjaCBp cwpjb25jZXJuZWQuCgogZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWktY29yZS5jIHwgNiAr KysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2kyYy9idXNzZXMvaTJjLXBhc2VtaS1jb3JlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJj LXBhc2VtaS1jb3JlLmMKaW5kZXggNzcyOGM4NDYwZGMwLi45MDI4ZmZiNThjYzAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFzZW1pLWNvcmUuYworKysgYi9kcml2ZXJzL2ky Yy9idXNzZXMvaTJjLXBhc2VtaS1jb3JlLmMKQEAgLTEzNyw2ICsxMzcsMTIgQEAgc3RhdGljIGlu dCBwYXNlbWlfaTJjX3hmZXJfbXNnKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAogCQlU WEZJRk9fV1Ioc21idXMsIG1zZy0+YnVmW21zZy0+bGVuLTFdIHwKIAkJCSAgKHN0b3AgPyBNVFhG SUZPX1NUT1AgOiAwKSk7CisKKwkJaWYgKHN0b3ApIHsKKwkJCWVyciA9IHBhc2VtaV9zbWJfd2Fp dHJlYWR5KHNtYnVzKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byByZXNldF9vdXQ7CisJCX0KIAl9 CiAKIAlyZXR1cm4gMDsKLS0gCjIuMzMuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 56CFDC433F5 for ; Tue, 29 Mar 2022 18:44:55 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KSdln44cvz3c24 for ; Wed, 30 Mar 2022 05:44:53 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=cutebit.org header.i=@cutebit.org header.a=rsa-sha256 header.s=mail header.b=MK0FFNR/; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=fail (SPF fail - not authorized) smtp.mailfrom=cutebit.org (client-ip=2a03:3b40:fe:f0::1; helo=hutie.ust.cz; envelope-from=povik+lin@cutebit.org; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cutebit.org header.i=@cutebit.org header.a=rsa-sha256 header.s=mail header.b=MK0FFNR/; dkim-atps=neutral X-Greylist: delayed 329 seconds by postgrey-1.36 at boromir; Wed, 30 Mar 2022 05:44:14 AEDT Received: from hutie.ust.cz (unknown [IPv6:2a03:3b40:fe:f0::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KSdl20HrKz2x9V for ; Wed, 30 Mar 2022 05:44:13 +1100 (AEDT) From: =?UTF-8?q?Martin=20Povi=C5=A1er?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cutebit.org; s=mail; t=1648579115; bh=MNw6TZjQg12ilqVca1Iyk/1Sr/JwKEtEFZo4CqiuRdA=; h=From:To:Cc:Subject:Date; b=MK0FFNR/dSMhYqsYkSiQpNIza2jECdZ01Sz1FG5KrRdcROhl1cEAdsLSEG4wXdfeM eEMzqSrFbkDtDZ9SN0WP0Wmg5wGWgEy3BVWpFBv37e0G916tpdI4G+MZ3CvqY2yZzb ovpC3Ak2hp3f1boVZ3YgYRmmBggUEat5PHwD2+Dw= To: Hector Martin , Sven Peter , Michael Ellerman Subject: [PATCH] i2c: pasemi: Wait for write xfers to finish Date: Tue, 29 Mar 2022 20:38:17 +0200 Message-Id: <20220329183817.21656-1-povik+lin@cutebit.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Martin=20Povi=C5=A1er?= , linux-kernel@vger.kernel.org, Olof Johansson , Paul Mackerras , Alyssa Rosenzweig , Jean Delvare , Janne Grunau , linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Wait for completion of write transfers before returning from the driver. At first sight it may seem advantageous to leave write transfers queued for the controller to carry out on its own time, but there's a couple of issues with it: * Driver doesn't check for FIFO space. * The queued writes can complete while the driver is in its I2C read transfer path which means it will get confused by the raising of XEN (the 'transaction ended' signal). This can cause a spurious ENODATA error due to premature reading of the MRXFIFO register. Adding the wait fixes some unreliability issues with the driver. There's some efficiency cost to it (especially with pasemi_smb_waitready doing its polling), but that will be alleviated once the driver receives interrupt support. Fixes: beb58aa39e6e ("i2c: PA Semi SMBus driver") Signed-off-by: Martin Povišer --- Tested on Apple's t8103 chip. To my knowledge the PA Semi controller in its pre-Apple occurences behaves the same as far as this patch is concerned. drivers/i2c/busses/i2c-pasemi-core.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/i2c/busses/i2c-pasemi-core.c b/drivers/i2c/busses/i2c-pasemi-core.c index 7728c8460dc0..9028ffb58cc0 100644 --- a/drivers/i2c/busses/i2c-pasemi-core.c +++ b/drivers/i2c/busses/i2c-pasemi-core.c @@ -137,6 +137,12 @@ static int pasemi_i2c_xfer_msg(struct i2c_adapter *adapter, TXFIFO_WR(smbus, msg->buf[msg->len-1] | (stop ? MTXFIFO_STOP : 0)); + + if (stop) { + err = pasemi_smb_waitready(smbus); + if (err) + goto reset_out; + } } return 0; -- 2.33.0