Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3730141pxb; Mon, 24 Jan 2022 16:33:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJyVLD2HD6yHeE0Y392R0V3k1HK7H+vit1ytD63XXv0g2RMJImjdVkYuh3RQMC9TcSfHZSVY X-Received: by 2002:a17:902:b48c:b0:14a:d42b:85bb with SMTP id y12-20020a170902b48c00b0014ad42b85bbmr16755601plr.171.1643070796589; Mon, 24 Jan 2022 16:33:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643070796; cv=none; d=google.com; s=arc-20160816; b=hzcniEI+m6PM9e2+VmfWFwnfumEpKGGzotzKsQYhjrUjzMtp9GoojuniVKUzXUWlcA AcG+6LA32NVn7qsD4FlSaoeEkVtOiBdZQ6DBiiTRT4r1KbIl48QU2f+GdABEAwTuDY9E +ARTuC8yTyk6XDT+Ci7XzX482bdE3ajyrulHkV6NasXZN9lBVwwsk6ow7vNgOFEzQyJR /mjRq/GAWSi7Ty3GeUIFTeCBF+qi2C+DunyGOFeKGrB46Vw1MNQ8C2efkZHbP7XIhQWX ndLUQqvpXQWNxqKtkq91O0xCHkxBVVWEfEA+mwXx0tk9Z+YI4yLGR/HNiPqpWpWodGCe Ck9A== 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=/2woW1nis1I9IqgWTUmxkgsmPGhNOJs838CSY4BE8b0=; b=FIFdIzxA3efP6SNOgJ7mJKFBHF6CQrTHEMXLa51Nhl6q0Jl3c+PcSwLp5up8zpV8kx rL70rNAOsiV/88CeGROHQ1Qfe2+dui3OujSpf/QI1X6Hh7iaot7SrVGZ/KYxrZoguhFM Tu2P5k3v/4z1Qzhwjk4of+ANd+hl/gybJUtugA5jgFPDbEqlWzOnwCgacNaQQTAJPv4k igDen9nmHsGgj+L7wAUkQLNjROAbgi5YeHX0mFBaiC8cR4VF/BfSqAHUhZK70uktXBWV LX4Ti/Mf74y5AkFQJT/iUBjQaQKeEt2co5U7MHEva1Qj4ic5aq3Kv731ESEAiJiGwFvv UtQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QGysfniD; 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 u62si6906627pgd.508.2022.01.24.16.33.04; Mon, 24 Jan 2022 16:33:16 -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=QGysfniD; 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 S3410457AbiAYA3P (ORCPT + 99 others); Mon, 24 Jan 2022 19:29:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59486 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1449591AbiAXVyz (ORCPT ); Mon, 24 Jan 2022 16:54:55 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F355C08B4FF; Mon, 24 Jan 2022 12:34:53 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 9C122614FF; Mon, 24 Jan 2022 20:34:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7DD83C340E5; Mon, 24 Jan 2022 20:34:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643056492; bh=6ftHw2PhpvyqVOJfiLYzxPb74sRaD6npgzQ7/f5plLI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QGysfniDGMikMrzsFM6AJnliQc1GrSgz2kEoXdvPNbX/V4gZq84bQUOsFoYPoYoHh 2aRdJANfeqEM0t5bn67bbA71DqXT4jkpDTWMOSQWpmigXkFRpzc+6WB3wxoGrn/bOU CqYSiG80qUexAj7uJUI7AtaIypdWljwTs6Sy8hQw= 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.15 501/846] tty: serial: imx: disable UCR4_OREN in .stop_rx() instead of .shutdown() Date: Mon, 24 Jan 2022 19:40:18 +0100 Message-Id: <20220124184118.317323671@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184100.867127425@linuxfoundation.org> References: <20220124184100.867127425@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 51a9f9423b1a6..7820049aba5af 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