Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4669757pxj; Wed, 12 May 2021 10:29:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyioqw3hyXPJz4POoK+cpzk3YJ+zFSTJWnXxQXDELyNgGUwfZlfKjji5uW0iTmUd0zFtg5v X-Received: by 2002:a17:906:c0c6:: with SMTP id bn6mr38022420ejb.436.1620840589372; Wed, 12 May 2021 10:29:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620840589; cv=none; d=google.com; s=arc-20160816; b=hdH+L5iWt9ov6vZ6BFjhzOtcXdVcRR9qHCezm5cIUqJI6p0mhz0OfxzcFAfOEv/d2k ph9VtllgbBkxIWJivJ98eIyyoGZqHgMQj62QZC2DENgYQkVw6UXAjZ/5p0mrL80F4DM+ RbiSoSwAIZxDe4JQXGGtW4tRwW5yCjidc/CviI6f+FX1Uo1qswY4nHsihpRdR/RPECYL rD4vj4KThMfnkRmOV34z9FaGn+YGOuJs5V0KfSEnuqEOL16ZZ3Vnu+NmEn5lpa4JO3da lO8W2Gporn49QjiSXV6xBbXj5zzPK4yunsDSNiMlII7X/df8a/wgjbS2Qkk7GtUKrtgA xdlA== 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=8WgItX0lV9hS2AsO3uFQxN+ELHp/kUeHrEEEbPa6Qts=; b=B2rGXUxZSH4Q3KodfLSf8Vftgalx3ZcME9iqk+yTSSiEdFEs3teOe0qgOY7zvEeHFE dOPawghQDWGKFR5bZsNmsTtYZrpMIJr/4hrvqsf8RSAmeGlfl3+mRzk71tMNKvehfPwR Rn+HLvEiCfa3ePZtmF6192pp+fFfyMM9szElE1tpz2cwOEj2+O+BQMieYhHw4zoDW2rC bdmrVxYp+giDSXIkaVEcHDrT9LmfwsN2WR7micxRvqoeJW+GXFQ3eWJ60QjL16N4MFlC Hh3C17AujHuWEuQeqMzrmRzSiw6JVPTQNvul7pT3tHbAz8WSuQSdiidyFM0RBOA1XCim 3tLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=o7tOdPPp; 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 h3si259363edf.461.2021.05.12.10.29.25; Wed, 12 May 2021 10:29:49 -0700 (PDT) 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=o7tOdPPp; 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 S1345793AbhELRMG (ORCPT + 99 others); Wed, 12 May 2021 13:12:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:38412 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235216AbhELP7T (ORCPT ); Wed, 12 May 2021 11:59:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F3F1F61CC4; Wed, 12 May 2021 15:32:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620833523; bh=fB2ymC7lOVdckjRTUKLZpr28i4cAT/4LZHa3MvLFjqI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o7tOdPPpIDujn5Www1CywzLMIEnEOi22jcI4FIzJEY5hlvZO9UG9jRuqX2noxfl2F OQ3tOYRO6+VycNxZFRQYRyqfhbh5/GXrgeBfc9SM1K/+PxTnQ1oPz36dy6w+XP76bV HRZeyGr8slCbEyKNrIeWgkfyNuztLrJ8hMWSCFsE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Erwan Le Ray , Sasha Levin Subject: [PATCH 5.11 149/601] serial: stm32: fix TX and RX FIFO thresholds Date: Wed, 12 May 2021 16:43:46 +0200 Message-Id: <20210512144832.721980855@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144827.811958675@linuxfoundation.org> References: <20210512144827.811958675@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: Erwan Le Ray [ Upstream commit 25a8e7611da5513b388165661b17173c26e12c04 ] TX and RX FIFO thresholds may be cleared after suspend/resume, depending on the low power mode. Those configurations (done in startup) are not effective for UART console, as: - the reference manual indicates that FIFOEN bit can only be written when the USART is disabled (UE=0) - a set_termios (where UE is set) is requested firstly for console enabling, before the startup. Fixes: 84872dc448fe ("serial: stm32: add RX and TX FIFO flush") Signed-off-by: Erwan Le Ray Link: https://lore.kernel.org/r/20210304162308.8984-5-erwan.leray@foss.st.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/tty/serial/stm32-usart.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c index 70155e0c3b02..91a33ec4dbb4 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -648,19 +648,8 @@ static int stm32_usart_startup(struct uart_port *port) if (ofs->rqr != UNDEF_REG) stm32_usart_set_bits(port, ofs->rqr, USART_RQR_RXFRQ); - /* Tx and RX FIFO configuration */ - if (stm32_port->fifoen) { - val = readl_relaxed(port->membase + ofs->cr3); - val &= ~(USART_CR3_TXFTCFG_MASK | USART_CR3_RXFTCFG_MASK); - val |= USART_CR3_TXFTCFG_HALF << USART_CR3_TXFTCFG_SHIFT; - val |= USART_CR3_RXFTCFG_HALF << USART_CR3_RXFTCFG_SHIFT; - writel_relaxed(val, port->membase + ofs->cr3); - } - - /* RX FIFO enabling */ + /* RX enabling */ val = stm32_port->cr1_irq | USART_CR1_RE | BIT(cfg->uart_enable_bit); - if (stm32_port->fifoen) - val |= USART_CR1_FIFOEN; stm32_usart_set_bits(port, ofs->cr1, val); return 0; @@ -768,9 +757,15 @@ static void stm32_usart_set_termios(struct uart_port *port, if (stm32_port->fifoen) cr1 |= USART_CR1_FIFOEN; cr2 = 0; + + /* Tx and RX FIFO configuration */ cr3 = readl_relaxed(port->membase + ofs->cr3); - cr3 &= USART_CR3_TXFTIE | USART_CR3_RXFTCFG_MASK | USART_CR3_RXFTIE - | USART_CR3_TXFTCFG_MASK; + cr3 &= USART_CR3_TXFTIE | USART_CR3_RXFTIE; + if (stm32_port->fifoen) { + cr3 &= ~(USART_CR3_TXFTCFG_MASK | USART_CR3_RXFTCFG_MASK); + cr3 |= USART_CR3_TXFTCFG_HALF << USART_CR3_TXFTCFG_SHIFT; + cr3 |= USART_CR3_RXFTCFG_HALF << USART_CR3_RXFTCFG_SHIFT; + } if (cflag & CSTOPB) cr2 |= USART_CR2_STOP_2B; -- 2.30.2