Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp3164197pxb; Mon, 18 Apr 2022 17:47:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzWKePwSaWuHpNP8k80+rg5wumfO6LzcK5rGrk9zCp7q6jL+mjLJP0YKzQrBC11EXcWdKgO X-Received: by 2002:a63:5223:0:b0:39d:2318:f99d with SMTP id g35-20020a635223000000b0039d2318f99dmr12127023pgb.268.1650329251765; Mon, 18 Apr 2022 17:47:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650329251; cv=none; d=google.com; s=arc-20160816; b=MMt8GZbKJVSUOiYVLrF7DYEmJ6oH1zKUuNglrc5KdKSdN4Ac4TFl2GebNymxoBQZQf Km6KlynfSiIvkUgTxDNhCl/k9nJF6FtbYZ3tBptwqVVJR8PK+VdHMR5VCrYNtoOuoV+P DKswRxybQSWbYk8voMuyMQ797mxre8McZKRp5jxMpm4WOoYf3oDj2eJRqNGSirVosEUI FB+MTCdBPZZQ1ZFeYCIEmrZK7O/ghDmpkR58bYcWPrRO/nc3BiFAXZ7+WvmAalQ6ONet dj5MNhI3QcDM1oEI755kIgex4TOE2b7RqVFkK07w+GFoQB3la/Cs5LSSIbhlApb3A5rw OXFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=wQIINUL1G7KAfnhskGEb0Edn5Atz3AnObyFFEqn5rnU=; b=S92XymHtsabM310KZ97a3bjEhXxzbgEKIEdXxzg4pQxDAlYxT5L1jq9FPfJuAZP65y gLVr6E8VMPy+iSKuBinTpcdQ43PbM/my8F1ZD5DKeewOY+VFsEVOLHfp8bydpxfD1N+c IOw85kWFX0O5v93lQC7AXhwzS3x/ywKYnjRtmRkNMpk5QAlGGQZ6eusP9tvoynGcmpKS ZhXe7yRLc3rHjMDoJ8/ClQLBxktbmMky6fj1IOauqh4IemtWyDYg3uFbThlB1wQ7PZn9 b8trOafEuM/QmKGcGaQ0jyxqfjLAsDpT2aw9XNv6UNmIGkxlReOI1C72yb7GM8TSyJuB 4yMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=poeKVeqa; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o6-20020a170902d4c600b0015904f6c4f0si3876829plg.19.2022.04.18.17.47.15; Mon, 18 Apr 2022 17:47:31 -0700 (PDT) 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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=poeKVeqa; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242805AbiDRNTH (ORCPT + 99 others); Mon, 18 Apr 2022 09:19:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242571AbiDRNAK (ORCPT ); Mon, 18 Apr 2022 09:00:10 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B2C7C31368; Mon, 18 Apr 2022 05:41:37 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 5A028B80EDE; Mon, 18 Apr 2022 12:41:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AA20AC385A1; Mon, 18 Apr 2022 12:41:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1650285695; bh=X0t+T/PV6H7afRr7VxLAQykE69EkNrL4/q4ZlSkuoE4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=poeKVeqaXl3ARTvZrpqkaVTT4btJArzFmSW1PsLK3MCjJWfdK0bIkft6xAzcH4RAe 64LUsvSsGHq7Q+v7GbL0rT4Rng7Yqu22Rgp7O2h7p8/ywCpkHDGFWcdHhOAWmuHDbu A4eJOYozOsxSGt1pEAwwjvnBK0fgNIZ2H47WN50g= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Martin=20Povi=C5=A1er?= , Sven Peter , Wolfram Sang Subject: [PATCH 5.10 093/105] i2c: pasemi: Wait for write xfers to finish Date: Mon, 18 Apr 2022 14:13:35 +0200 Message-Id: <20220418121149.276158364@linuxfoundation.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220418121145.140991388@linuxfoundation.org> References: <20220418121145.140991388@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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 From: Martin Povišer commit bd8963e602c77adc76dbbbfc3417c3cf14fed76b upstream. 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 Reviewed-by: Sven Peter Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman --- drivers/i2c/busses/i2c-pasemi.c | 6 ++++++ 1 file changed, 6 insertions(+) --- a/drivers/i2c/busses/i2c-pasemi.c +++ b/drivers/i2c/busses/i2c-pasemi.c @@ -137,6 +137,12 @@ static int pasemi_i2c_xfer_msg(struct i2 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;