Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp3535835pxp; Tue, 8 Mar 2022 16:53:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJw1Eimr1easMipAhMJso3B6Gr9jvT5PpX8FwuVpllTvIEe+wn8EuZSWe/oroMxuCXrEVjk2 X-Received: by 2002:a17:90b:4c43:b0:1bf:8585:9baa with SMTP id np3-20020a17090b4c4300b001bf85859baamr7713754pjb.60.1646787194253; Tue, 08 Mar 2022 16:53:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646787194; cv=none; d=google.com; s=arc-20160816; b=GhEt4WoEPZi+iPOIzUauxvW04D4CgsjUuw6s9e3fhWr7j27C4+N8vULKPB30g/pYT/ QQwsS5Mr2Oa7TPVDI3gczbJMlZG/n0R06nxxjA70fndFL1aoUd9aukVemjrYpBRVoUv3 Yfl5R0Xtb6KiVzyvP29HrH/lNbgl6vztXpZzdzipRwrC+7SQCSoQss1crrnPNKSqt1Kc XpBFv5sfwUA/05kzzE+NqM47zEt6rvnvAhGzGeBU2ovCqG3tlT06FhUED+ZM759Zn5zj i/EaZs0ar8kXnIRtROtmUCk/jEi47jo8bhPkmOVBrj7IqORlgw4fyeL8/FNFXqHE3+uZ DBPg== 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=pXOwfvfZ/MMxu8YkGm01LEcvXD3SeojilFJWVVvxRsc=; b=drAxdp1kobkAHDaiFHImUX0pViUlKq3Ty0/ncVCEfcMbAJg6YTSEXeacD6MU+S7jjI V1NmwgYvPCiLZonqCylMaeQN08lpCsGSI2j2Nx7A/MJCYYrX//VTtg+QpeZuqoWizJf9 THlIIsQZCBpjhV3UfDtEc6YFTfVOy/HUjAgHf+Ml2qvn2i8g+1kfoIxc+Mv7KGksHIOh 6+A8Q8ptqOv+ospEwQUL3fi/8Jko3+51CrxvTWJPNDsuiiuhlWkPxm5X6s70jBCWzjPj JJM68jxxi925YLzg5sG4td/d5Ko+njmg/yk28ZQEyE3PFSxWek4DVimgROcEenHJtXFX 8Wng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=iUH2Ak3L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id a1-20020a63e841000000b00341feb9ef48si413863pgk.302.2022.03.08.16.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 16:53:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=iUH2Ak3L; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 78A02165C22; Tue, 8 Mar 2022 16:08:40 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241071AbiCGKTr (ORCPT + 99 others); Mon, 7 Mar 2022 05:19:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240498AbiCGKBE (ORCPT ); Mon, 7 Mar 2022 05:01:04 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4365BC84; Mon, 7 Mar 2022 01:49:17 -0800 (PST) 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 70B27B810A8; Mon, 7 Mar 2022 09:49:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D7BA4C340F5; Mon, 7 Mar 2022 09:49:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1646646555; bh=YfYYgfEG/tUw+RF/Z5+2ChlPUubhZWSVdHx6WExWyhs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iUH2Ak3L64nYnUC4klM5xorHFAWsYggIbhxpsjZ9ec3nKuOHJgBSOUSCu4BwaJnqU DBXUFUFun+3EzJAWpTAgYOUBnAiqlb2dM5Erat6D0fs/b9bJzpPiMmLbNvQxRyw6Zq 0Dca2ktiG145+7+ETFl1db1f8BHnO3RIko2QgIOo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eric Anholt , Stefan Wahren , Wolfram Sang , Sasha Levin Subject: [PATCH 5.16 003/186] i2c: bcm2835: Avoid clock stretching timeouts Date: Mon, 7 Mar 2022 10:17:21 +0100 Message-Id: <20220307091654.191826097@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220307091654.092878898@linuxfoundation.org> References: <20220307091654.092878898@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=-2.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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: Eric Anholt [ Upstream commit 9495b9b31abe525ebd93da58de2c88b9f66d3a0e ] The CLKT register contains at poweron 0x40, which at our typical 100kHz bus rate means .64ms. But there is no specified limit to how long devices should be able to stretch the clocks, so just disable the timeout. We still have a timeout wrapping the entire transfer. Signed-off-by: Eric Anholt Signed-off-by: Stefan Wahren BugLink: https://github.com/raspberrypi/linux/issues/3064 Signed-off-by: Wolfram Sang Signed-off-by: Sasha Levin --- drivers/i2c/busses/i2c-bcm2835.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index 37443edbf7546..ad3b124a2e376 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -23,6 +23,11 @@ #define BCM2835_I2C_FIFO 0x10 #define BCM2835_I2C_DIV 0x14 #define BCM2835_I2C_DEL 0x18 +/* + * 16-bit field for the number of SCL cycles to wait after rising SCL + * before deciding the slave is not responding. 0 disables the + * timeout detection. + */ #define BCM2835_I2C_CLKT 0x1c #define BCM2835_I2C_C_READ BIT(0) @@ -477,6 +482,12 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) adap->dev.of_node = pdev->dev.of_node; adap->quirks = of_device_get_match_data(&pdev->dev); + /* + * Disable the hardware clock stretching timeout. SMBUS + * specifies a limit for how long the device can stretch the + * clock, but core I2C doesn't. + */ + bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_CLKT, 0); bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, 0); ret = i2c_add_adapter(adap); -- 2.34.1