Received: by 2002:a05:7412:b101:b0:e2:908c:2ebd with SMTP id az1csp2522997rdb; Wed, 15 Nov 2023 03:22:33 -0800 (PST) X-Google-Smtp-Source: AGHT+IGXx49y/DJXIOmhz5CE9n08DZn+Yl4iMTeafORy+vqtAQxs2WIxlIryDkjQP2KsTP/83kyn X-Received: by 2002:a05:6a00:8d82:b0:6c3:468c:6caa with SMTP id im2-20020a056a008d8200b006c3468c6caamr8060242pfb.6.1700047353105; Wed, 15 Nov 2023 03:22:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700047353; cv=none; d=google.com; s=arc-20160816; b=xMqJkmDRYIWWGQzu0OFgmg5QaaOsESceITMzwR57qjWzIt0b4StuYUvdTZPPNYX40V E7FN8air1EXZXPyXGEylFlkD7PdU8Bu7FXDOJOk8JpIqHnSY0m3/aNGewogqjZl08nL8 6VJ8Gz45vEScILQrjsAMiMPFfCGqjx/jCOhC/LPs3Ot6PGw2G/TZ/M4KAoh0bRz1P8PC iZ6rTflj04NsRzf/B9mmElICWM1UxxUdQGG6Wz+/zQkSAwMjRVi5dVIrq+/Y97L+VVWB 9bGPr9F6lgwMQchAXKI7l3lN9/yjrheZzdIcLGynjT/pvhLtmtrZjx2tY2MkQad/sMkP M2Yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=MxlrJlVfxDupPEQAyhqWZqxqwcUXj7ZHASPspgHZxcM=; fh=SRvyUHSI/aBfYmqnJ9O6IeSTvqEczKf/GXmETGa0pE4=; b=lArh5vI2R0E+XSKXlTHrlSjOowzznt7Kt6fa/uJ1bgq0He/sWkFJ6RzNT2CrDOf4Wy GxhAyinHogDGf9YCXd//3nUEqE1A5VEu770sBb166MztiPuql2RZ5DOAqiW0eaKEnsBQ D729dkpA/G9OQ9Jtccl+EWHhj07MLAQa5arh6A7OaklrFlAaMpnE8/4a+1kKIt7B17Si egdRT4vZsjo0Iezgm0Fs+2BGjdSeSlukUBh7k8Sr3MzGwdS5MitAS0PGSFKqFGgkEPuk JiYAuCgUQjducl7tNNW0AYcxAMiSoFqh1VtLkzhjVGF/w5Zv+RKzHQ5KuA0dIX1fJll2 5Tqw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id k185-20020a6384c2000000b00577f87e6210si10046705pgd.332.2023.11.15.03.22.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Nov 2023 03:22:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 77432801D903; Wed, 15 Nov 2023 03:22:30 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343586AbjKOLWQ (ORCPT + 99 others); Wed, 15 Nov 2023 06:22:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343564AbjKOLWP (ORCPT ); Wed, 15 Nov 2023 06:22:15 -0500 Received: from mail.bugwerft.de (mail.bugwerft.de [46.23.86.59]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F3522F5; Wed, 15 Nov 2023 03:22:11 -0800 (PST) Received: from [10.10.0.76] (unknown [62.214.9.170]) by mail.bugwerft.de (Postfix) with ESMTPSA id 8B8E228154F; Wed, 15 Nov 2023 11:22:10 +0000 (UTC) Message-ID: Date: Wed, 15 Nov 2023 12:22:10 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] serial: sc16is7xx: address RX timeout interrupt errata Content-Language: en-US To: Lech Perczak , Hugo Villeneuve Cc: gregkh@linuxfoundation.org, jirislaby@kernel.org, u.kleine-koenig@pengutronix.de, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Popov , stable@vger.kernel.org References: <20231114074904.239458-1-daniel@zonque.org> <20231114102025.d48c0a6ec6c413f274b7680b@hugovil.com> <140280a6-1948-4630-b10c-8e6a2afec2de@zonque.org> <3fac7d72-0a1b-4d93-9245-a0f8af1240a6@camlingroup.com> From: Daniel Mack In-Reply-To: <3fac7d72-0a1b-4d93-9245-a0f8af1240a6@camlingroup.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 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]); Wed, 15 Nov 2023 03:22:30 -0800 (PST) Hi Lech, On 11/15/23 11:51, Lech Perczak wrote: > W dniu 14.11.2023 o 16:55, Daniel Mack pisze: >> Hi Hugo, >> >> On 11/14/23 16:20, Hugo Villeneuve wrote: >>> On Tue, 14 Nov 2023 08:49:04 +0100 >>> Daniel Mack wrote: >>>> This devices has a silicon bug that makes it report a timeout interrupt >>>> but no data in FIFO. >>>> >>>> The datasheet states the following in the errata section 18.1.4: >>>> >>>> "If the host reads the receive FIFO at the at the same time as a >>>> time-out interrupt condition happens, the host might read 0xCC >>>> (time-out) in the Interrupt Indication Register (IIR), but bit 0 >>>> of the Line Status Register (LSR) is not set (means there is not >>>> data in the receive FIFO)." >>>> >>>> When this happens, the loop in sc16is7xx_irq() will run forever, >>>> which effectively blocks the i2c bus and breaks the functionality >>>> of the UART. >>>> >>>> From the information above, it is assumed that when the bug is >>>> triggered, the FIFO does in fact have payload in its buffer, but the >>>> fill level reporting is off-by-one. Hence this patch fixes the issue >>>> by reading one byte from the FIFO when that condition is detected. >>> From what I understand from the errata, when the problem occurs, it >>> affects bit 0 of the LSR register. I see no mention that it >>> also affects the RX FIFO level register (SC16IS7XX_RXLVL_REG)? >> True, the errata doesn't explicitly mention that, but tests have shown >> that the RXLVL register is equally affected. >> >>> LSR[0] would be checked only if we were using polled mode of >>> operation, but we always use the interrupt mode (IRQ), and therefore I >>> would say that this errata doesn't apply to this driver, and the >>> patch is not necessary... >> Well, it is. We have seen this bug in the wild and extensively >> stress-tested the patch on dozens of boards for many days. Without this >> patch, kernels on affected systems would consume a lot of CPU cycles in >> the interrupt threads and effectively render the I2C bus unusable due to >> the busy polling. >> >> With this patch applied, we were no longer able to reproduce the issue. > Could you share some more details on the setup you use to reproduce this? I'd like to try out as well. We have boards with 2 I2C busses with an SC16IS752IBS on both. The UARTs are configured in infrared mode, and they send receive IR signals constantly. I guess the same would happen with other electrical interfaces, but the important bit is that the UARTs see a steady stream of inbound data. The bug has hit us on production units and when it does, sc16is7xx_irq() would spin forever because sc16is7xx_port_irq() keeps seeing an interrupt in the IIR register that is not cleared because the driver does not call into sc16is7xx_handle_rx() unless the RXLVL register reports at least one byte in the FIFO. Note that this issue might only occur in revision E of the silicon. And there seems to be now way to read the revision code through I2C, so I guess you won't be able to figure out easily whether your chip is affected. Let me know if I can provide more information. Thanks, Daniel