Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3642353pxb; Mon, 24 Jan 2022 14:13:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJx9udiDEK+XiPr0N6yCFYRXAXmSXeeF1G65iq2SsbcSfLUn4jYq1bxlyrvB9k8rpbMWsIJg X-Received: by 2002:a17:902:ab8d:b0:14a:98aa:b87 with SMTP id f13-20020a170902ab8d00b0014a98aa0b87mr16405281plr.100.1643062408990; Mon, 24 Jan 2022 14:13:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643062408; cv=none; d=google.com; s=arc-20160816; b=h43RgvSwODg2UqM5Q17QE4UBdNCAFa78t2h2HPF37fhGSdJJNT/gyHU9wg/HKUZ+S6 8RHgSffl1J4GFXGWD5qTo8zxEUFagz2SJ+EWTLtCvA+hFj8GWPkFIJrmiCVUwdeHz5wu KMAlV0P+ARm7uDoYw6bqeQ98x3J644F9yuxCAcdLJQE/RcicJeQ5UwB0IkAOD5dEuqFM vrD6jcBF1/UlAYYQsoaE9svJchP3S9tQ7O9KLsTWTM2720HRAF4K50/hb5TpJ/RQnqVn SuaJaR3t7hpRxHPUrldvBFVZRcFub/kO1X3+nSOl0zs0QQ8+ZYFAniPw6JzALAWrQ7Ax 1c4Q== 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=wOMsot+/ntizijBXLaggz6nzcUJkb6ckypc7SoxrhzU=; b=Qvu7jPfeUipN7pYGPQS6A7kHrg9utomKfk80zcMBEkhb6dOSUVnIG67AyYo5kwJ3GP JN2tBOKj11UW122mPrNAF15rv2ZJDi0oYlIYF+Zf9LAWL+GeaLnasKYKzQm6iM0JllBy RBFzLELiT/jB5Zz24LUsR4L2kIFnpq+w8hZS3yamMIC/hEoefjNyz6Iy7KZu6affva/2 a9wsBflnAy3bguwBFw02BOHor6J4U2KfVVjPn64gePmGf0qvZ7RDgY5MqHsScBm4eHAS JbnmKGDlkw+4MLQBU7+pA32SEzK6hkkrF+Oc3r4AGqD4mzVsUVb6W0N3j5JIcCtzShLO gsTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=bvcFThnE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r187si15707077pgr.87.2022.01.24.14.13.14; Mon, 24 Jan 2022 14:13:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=bvcFThnE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1577372AbiAXV76 (ORCPT + 99 others); Mon, 24 Jan 2022 16:59:58 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:38990 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1451378AbiAXVWr (ORCPT ); Mon, 24 Jan 2022 16:22:47 -0500 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 65179B811FB; Mon, 24 Jan 2022 21:22:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9A06AC340E4; Mon, 24 Jan 2022 21:22:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643059365; bh=k0ORuEQnGTqteUEkwb9luAXHUAo6NBshCwtibeD8tfA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bvcFThnE3I6AMwvUwonYiRAEcMYT00DI8ShSUUMWcHF9yurk9tAKeEBZcvg0rl5r2 YXcaATV5Ro3tO1kmjLqgtnhPrjbY0+6K3reDAs+jd4APiSJdzwc3E8JGIgGdALL0HR DC3Wrk4qIUVv+x7XyDZGvils3RRHZgfGte8YMspk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Fugang Duan , Sherry Sun , Sasha Levin Subject: [PATCH 5.16 0592/1039] tty: serial: imx: disable UCR4_OREN in .stop_rx() instead of .shutdown() Date: Mon, 24 Jan 2022 19:39:41 +0100 Message-Id: <20220124184145.230409176@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184125.121143506@linuxfoundation.org> References: <20220124184125.121143506@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Fugang Duan [ Upstream commit 028e083832b06fdeeb290e1e57dc1f6702c4c215 ] The UCR4_OREN should be disabled before disabling the uart receiver in .stop_rx() instead of in the .shutdown(). Otherwise, if we have the overrun error during the receiver disable process, the overrun interrupt will keep trigging until we disable the OREN interrupt in the .shutdown(), because the ORE status can only be cleared when read the rx FIFO or reset the controller. Although the called time between the receiver disable and OREN disable in .shutdown() is very short, there is still the risk of endless interrupt during this short period of time. So here change to disable OREN before the receiver been disabled in .stop_rx(). Signed-off-by: Fugang Duan Signed-off-by: Sherry Sun Link: https://lore.kernel.org/r/20211125020349.4980-1-sherry.sun@nxp.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/tty/serial/imx.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 90f82e6c54e46..6f7f382d0b1fa 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -486,18 +486,21 @@ static void imx_uart_stop_tx(struct uart_port *port) static void imx_uart_stop_rx(struct uart_port *port) { struct imx_port *sport = (struct imx_port *)port; - u32 ucr1, ucr2; + u32 ucr1, ucr2, ucr4; ucr1 = imx_uart_readl(sport, UCR1); ucr2 = imx_uart_readl(sport, UCR2); + ucr4 = imx_uart_readl(sport, UCR4); if (sport->dma_is_enabled) { ucr1 &= ~(UCR1_RXDMAEN | UCR1_ATDMAEN); } else { ucr1 &= ~UCR1_RRDYEN; ucr2 &= ~UCR2_ATEN; + ucr4 &= ~UCR4_OREN; } imx_uart_writel(sport, ucr1, UCR1); + imx_uart_writel(sport, ucr4, UCR4); ucr2 &= ~UCR2_RXEN; imx_uart_writel(sport, ucr2, UCR2); @@ -1544,7 +1547,7 @@ static void imx_uart_shutdown(struct uart_port *port) imx_uart_writel(sport, ucr1, UCR1); ucr4 = imx_uart_readl(sport, UCR4); - ucr4 &= ~(UCR4_OREN | UCR4_TCEN); + ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); spin_unlock_irqrestore(&sport->port.lock, flags); -- 2.34.1