Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4658413pxj; Wed, 12 May 2021 10:13:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0g0SvMtR3WtYD2XIi5OED2a4/juYBQ8iE44le9MpZNQtBokA8GLxZh8DRC/TkDAJQ9lcH X-Received: by 2002:aa7:d917:: with SMTP id a23mr43702878edr.260.1620839629209; Wed, 12 May 2021 10:13:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620839629; cv=none; d=google.com; s=arc-20160816; b=XNBAwuF01UxfKuazQVpsHFWX5NgULK4kelkfpj1MMggXmbxIDMDLe7gSaBGlB7Ilq/ elweAIshFol4McYbcgBtE7dtnJpAnbOdZ5KrkcYCYHjPpYGcR19U20Mkb8mhDv5BD0QD 7MiHNGvb1tKAvqeOPhFvL9bR5Zlvg4gVawDbd7L4MK3Hx32lcTAKeCXg1ztLitI6tUrS TkJiWd/etB4VbZIfaBDajDdlQb2Mbo79xm2626h8r6gFbryqAGOdhHKTsrjlal4wvPEY lxI5lpZjT85SCAyHJxqybARJMbEmb919dhpMuoKMOMWwou9zyWG7vnzNrzn/yQkAe2G4 osDQ== 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=EKnyXysmmRNlwEp6fGsSSlEbf+79EFNBDCv4+hoNvco=; b=wlV4IFlfMRfln5zdeZ17LngumLXILnExv8OE8Ns+CaNikamx13tcNIdjRLYxtExB85 v5GwYiPCKRuhlooTMvr5q065XUY01TbnFytv724e/oLltQ3hOngbZUTrX2zJHSIRbctU u8jgaDuGJ156ivHLMBI2M0GT496Jn9h+No/oLGU+wjTJliDPxWw1KAG0zXhBw1h762iW AuUmqgOZ9lhlZx/ELReQWD7WlCgJnAeT4xWPbDYqG/SG2Mi8sRlJWhAuCrHNq6crOjJP vD2TldVDIqazwwLzphXhxat2FPoFnGf4QRQmu9Nv60T0UHFuF/eVrSydHCyoKLi8kf8D C+kQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2EXcrOnZ; 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 bw19si521883ejb.85.2021.05.12.10.13.25; Wed, 12 May 2021 10:13: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=2EXcrOnZ; 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 S241487AbhELRI0 (ORCPT + 99 others); Wed, 12 May 2021 13:08:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:37076 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238203AbhELP5b (ORCPT ); Wed, 12 May 2021 11:57:31 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A9D6261439; Wed, 12 May 2021 15:30:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620833458; bh=h44MHavJuuArjrpAwtzhkwqsgKm4E5Xw3coWdkO0kow=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2EXcrOnZSDF+Empv3XW6fSZ9ojioQLigPGbSpSnjGIzmHD4kRQCvZ8uGMw+WahShH 9LL/xcRU1wie3a2Q4NdpM/MbAaSesZ3ZtzbrN95QeS2Z8kBX0unElIBVztOvM8dcAo 80/7rf5jPwxwMku6yltrA4d0jrgO7x1lVkCHB2LE= 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 158/601] serial: stm32: fix tx_empty condition Date: Wed, 12 May 2021 16:43:55 +0200 Message-Id: <20210512144833.039430874@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 3db1d52466dc11dca4e47ef12a6e6e97f846af62 ] In "tx_empty", we should poll TC bit in both DMA and PIO modes (instead of TXE) to check transmission data register has been transmitted independently of the FIFO mode. TC indicates that both transmit register and shift register are empty. When shift register is empty, tx_empty should return TIOCSER_TEMT instead of TC value. Cleans the USART_CR_TC TCCF register define (transmission complete clear flag) as it is duplicate of USART_ICR_TCCF. Fixes: 48a6092fb41f ("serial: stm32-usart: Add STM32 USART Driver") Signed-off-by: Erwan Le Ray Link: https://lore.kernel.org/r/20210304162308.8984-13-erwan.leray@foss.st.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/tty/serial/stm32-usart.c | 5 ++++- drivers/tty/serial/stm32-usart.h | 3 --- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c index cb8c2bece6d6..2cf9fc915510 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -514,7 +514,10 @@ static unsigned int stm32_usart_tx_empty(struct uart_port *port) struct stm32_port *stm32_port = to_stm32_port(port); const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; - return readl_relaxed(port->membase + ofs->isr) & USART_SR_TXE; + if (readl_relaxed(port->membase + ofs->isr) & USART_SR_TC) + return TIOCSER_TEMT; + + return 0; } static void stm32_usart_set_mctrl(struct uart_port *port, unsigned int mctrl) diff --git a/drivers/tty/serial/stm32-usart.h b/drivers/tty/serial/stm32-usart.h index cb4f327c46db..94b568aa46bb 100644 --- a/drivers/tty/serial/stm32-usart.h +++ b/drivers/tty/serial/stm32-usart.h @@ -127,9 +127,6 @@ struct stm32_usart_info stm32h7_info = { /* Dummy bits */ #define USART_SR_DUMMY_RX BIT(16) -/* USART_ICR (F7) */ -#define USART_CR_TC BIT(6) - /* USART_DR */ #define USART_DR_MASK GENMASK(8, 0) -- 2.30.2