Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp3832487pxb; Tue, 19 Apr 2022 10:39:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxUq+DulJ0im+1Pr+DGfoDE9mLDv42GG0LvzAtyQTdxViSXYk0CQ92RyfAhJBODvCBRtQnc X-Received: by 2002:a05:6a00:1a8f:b0:50a:8c2d:2ee8 with SMTP id e15-20020a056a001a8f00b0050a8c2d2ee8mr7723576pfv.46.1650389958447; Tue, 19 Apr 2022 10:39:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650389958; cv=none; d=google.com; s=arc-20160816; b=wKdsGIEtYE8d1AhwnBi9mN15XJbHIFiT6Wx966EqdsGfmWOeF30EtxOW7EMt+7S/Pm sfQlIlBs9yFydbLaV1J1SGOWkRtXan+VwXKUFl+ERog8G9YvOUDVxSm84NigEG0HYEKc a5NrgVCsASyLqXuDAks2M19fhD+WGcQVKMRZOFWUKeaSbEOmxRQx1O1k4O+pmUwzTgps OpAvRBUiNM13nhLW5o+uppTQAM0Dax2Qdf/QaXhsh5IOnypVKvZlHx+GUOee6IHRs7S0 sl1AINx6giAmqLeBgIQRG4red+9ndLZinO6oI0qdMn3qVxwTJYsC+Y1tMGMG4XEYQTwF CrWw== 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=qqRTkR9JM+g0UnHOQVCGd3lEbyFO7Pm6jCOpwoFwh7A=; b=IZeMFW9sHHEaRdllgBf0bFKFiP8VOizSRdE3hvovyDVQWaM/crlcPoitzTU7R3iPdv VHb1xErwOqbFvkYE2wV5zAD/5aPVYFKqWYkc9rPhO+8Pv3lC3Y9zFT8waaFMCkGstZG0 MOuaEDgh/HE4g5rhKvrCaj0mPb89zmYvOl2kQQIrUFeZuSUHhBQgw9coRTBSHy8WbkNi ffVMf/z5Me9XdQUmtpKt06nrQWHPXVxPSq9d9vdaHz1gwTiP+YlZwsqXZp4/HkKP6KW1 o3ZuTn+iZvSVTXO/xtXN1XE1c1b6y1V7ND4bRA27dX3fRBI5rznm2HWKgvlDOkWtJUGM t6Mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="Y5e4f/3P"; 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 lw14-20020a17090b180e00b001c66f2284b7si3107754pjb.49.2022.04.19.10.39.02; Tue, 19 Apr 2022 10:39:18 -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="Y5e4f/3P"; 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 S243063AbiDRNdW (ORCPT + 99 others); Mon, 18 Apr 2022 09:33:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41542 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241120AbiDRNGi (ORCPT ); Mon, 18 Apr 2022 09:06:38 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C52D21276; Mon, 18 Apr 2022 05:47:10 -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 2A7D7B80E44; Mon, 18 Apr 2022 12:47:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7AF4AC385A7; Mon, 18 Apr 2022 12:47:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1650286027; bh=qt6zVlScKlgp/UWRwAPjnLop5XpVwyg8xY7P3/aVvDE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y5e4f/3PnPuE3HfsGsCDaTtydfPYJPUZ43DbRTZpdHFI8BmXOFdZoKEAdTKLuVLyO 3d21fe42vHJkWzq1oGF2g9bTiOoKINYP9zE4VeMlk8VvsdLO3J4YGWEXIDnfD1wbKG flmRY9fnRcYF/ob2Pr9UsI/e5WvA41Yl4ZuGvIQY= 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 4.19 32/32] i2c: pasemi: Wait for write xfers to finish Date: Mon, 18 Apr 2022 14:14:12 +0200 Message-Id: <20220418121128.061258659@linuxfoundation.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220418121127.127656835@linuxfoundation.org> References: <20220418121127.127656835@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 @@ -145,6 +145,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;