Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp2852746rdh; Mon, 30 Oct 2023 09:27:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEU0oRAVEVLOTQ2v4P0KoYH5jp4zqMEV5ggHAybk4/FxXYunaOSfcKJl+Om62r3TIbCu4Qc X-Received: by 2002:a05:6358:7e07:b0:169:8400:ed90 with SMTP id o7-20020a0563587e0700b001698400ed90mr40369rwm.17.1698683228520; Mon, 30 Oct 2023 09:27:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698683228; cv=none; d=google.com; s=arc-20160816; b=u2LBiG1pJ285uO9jP3yPq1zPpdj6iKVQ10SyXAa2nD6Qb0p905J1jTUTrrNSR2kP2X 3Gcff69DI5XrVnOHNbbs7RRE0tA93/mFIuIrEQwCiR0UI4T0pszusvbW9Yn8EZksm9Eh 3efkTbynR02T/rk+4LLyfOqOWAZvzWUgiLl5OEW0G7z+ysmHKFlIxtN2j6Mb0Zj/RJ11 OJIeOwIKlBJChmzhZZw0b60b2oRlOdVso+bt6MvWHdGhDw8X7kmabkOG46EdPFrZxYI3 RN+lO6W9OqiGr9e9KAwmECGHdVN/L8UqdKe637Vurs1e/rYv0SZ/2OwS1+Qy4LB9lkVE NFLg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :original-cc:author:original-subject:dkim-signature; bh=hfdYzCdm+x+tKMPgcOZzIeuFJxxf0KYbhVmSfhSKie0=; fh=UTvaa1qCF7gNWd6e3N5d271DWpCxL+11oDLdst+O9ns=; b=Vsb0rvxu1F60N4Ql+h8r3QuUE2J3BIVR2HXbYpL8lsyYKpDOwEJh5XHxomeFCyAzkh M7MLD4TajASjWKzi4GHNKkKaQOnb+rL5m0LuK53QQ7TBLJPWZ9oLJOow3VlvFcXMI3RA PVCDnqZefleEgCrK2BC7oP++GlPNQ2tiWsjDvKvL16l/r5uJv5OYCHoZW8oUQRJQr2z4 +YBLmindLNgmGSFqX2OYRYAgmuFEYpKtpkp6ex/qu/y0U/pbMBVUtV5KkmJ+iGQhKSxL Dn8hF0vGmnOfoWsPx+GgaZqTrjVV40bhWtCUiC03h5Uhhj03umZsOXhtlpzSqnidlFQq 0p3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@isely.net header.s=deb header.b=AEhPwc3i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cobaltdigital.com Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id l128-20020a633e86000000b005ad727cfd10si5204413pga.132.2023.10.30.09.27.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 09:27:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@isely.net header.s=deb header.b=AEhPwc3i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cobaltdigital.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 00A9D80A4AD0; Mon, 30 Oct 2023 09:26:59 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233325AbjJ3Q0o (ORCPT + 99 others); Mon, 30 Oct 2023 12:26:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44858 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232555AbjJ3Q0m (ORCPT ); Mon, 30 Oct 2023 12:26:42 -0400 X-Greylist: delayed 308 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 30 Oct 2023 09:26:40 PDT Received: from cnc.isely.net (cnc.isely.net [192.69.181.175]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4020CD9 for ; Mon, 30 Oct 2023 09:26:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=isely.net; s=deb; t=1698682891; bh=hfdYzCdm+x+tKMPgcOZzIeuFJxxf0KYbhVmSfhSKie0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AEhPwc3ik23Rivj/BYW/k5RTjxSASvnPmmZsZ2pJKq0Fu3t/B+OIYQ2KW1Fi3xX9w n+owQehpIKD4JXkT5R0h5K7i2Oatqp3g2yXkk0DZRbLHc1th1QKUcqK4XfX1zvzfjC jVgaAnB5Kv/vejUF++ujkzN3mZbPxg3HOSO9Wf7QL7gdoacwfFZOoKvFBEyM7 Original-Subject: [PATCH 1/2] [i2c-bcm2835] Fully clean up hardware state machine after a timeout Author: mike.isely@cobaltdigital.com Original-Cc: Mike Isely , Mike Isely , Broadcom internal kernel review list , Ray Jui , Scott Branden , linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Received: from cobalt1.eng.cobalt.local (ts3-dock1.isely.net [::ffff:192.168.23.13]) (AUTH: PLAIN isely, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384) by cnc.isely.net with ESMTPSA id 000000000008093D.00000000653FD80B.000079FF; Mon, 30 Oct 2023 11:21:31 -0500 From: mike.isely@cobaltdigital.com To: Andi Shyti , Florian Fainelli Cc: Mike Isely , Mike Isely , Broadcom internal kernel review list , Ray Jui , Scott Branden , linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] [i2c-bcm2835] Fully clean up hardware state machine after a timeout Date: Mon, 30 Oct 2023 11:21:13 -0500 Message-Id: <20231030162114.3603829-2-mike.isely@cobaltdigital.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231030162114.3603829-1-mike.isely@cobaltdigital.com> References: <20231030162114.3603829-1-mike.isely@cobaltdigital.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Mime-Autoconverted: from 8bit to 7bit by courier 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Mon, 30 Oct 2023 09:27:00 -0700 (PDT) From: Mike Isely When the driver detects a timeout, there's no guarantee that the ISR would have fired. Thus after a timeout, it's the foreground that becomes responsible to reset the hardware state machine. The change here just duplicates what is already implemented in the ISR. Signed-off-by: Mike Isely --- drivers/i2c/busses/i2c-bcm2835.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index 8ce6d3f49551..96de875394e1 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -345,42 +345,46 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap); unsigned long time_left; int i; for (i = 0; i < (num - 1); i++) if (msgs[i].flags & I2C_M_RD) { dev_warn_once(i2c_dev->dev, "only one read message supported, has to be last\n"); return -EOPNOTSUPP; } i2c_dev->curr_msg = msgs; i2c_dev->num_msgs = num; reinit_completion(&i2c_dev->completion); bcm2835_i2c_start_transfer(i2c_dev); time_left = wait_for_completion_timeout(&i2c_dev->completion, adap->timeout); bcm2835_i2c_finish_transfer(i2c_dev); if (!time_left) { + /* Since we can't trust the ISR to have cleaned up, do the + * full cleanup here... */ bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); + bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, BCM2835_I2C_S_CLKT | + BCM2835_I2C_S_ERR | BCM2835_I2C_S_DONE); dev_err(i2c_dev->dev, "i2c transfer timed out\n"); return -ETIMEDOUT; } if (!i2c_dev->msg_err) return num; dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) return -EREMOTEIO; return -EIO; } -- 2.39.2