Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4708037pxj; Wed, 12 May 2021 11:21:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxxCKlhcH08wxq6xe4w30ecMUvcpjlBg1BK7ScB3Kbdd/SvLVPWmIw4qbJQ4Yy8aEZS7qwo X-Received: by 2002:a9d:20e5:: with SMTP id x92mr32348130ota.105.1620843718170; Wed, 12 May 2021 11:21:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620843718; cv=none; d=google.com; s=arc-20160816; b=DKAP/X/Qdgr6pRBQiz2S+W+SMqPRi1cERGWiU6HYnI5C7uYyk0rHnW564J7x0Nx3OF Fcot6HCUgVMZWlYKKKEa6WnJKZdB5wVmhWcKWc+ESH2HRS3qPQQ8TkcP8YwbbTe5Su+k sRt0f03xANCcozk9XHhmh8TN852+vrAWwtPN4JJnuKiBhH9RYpvj36QvGZgCUFovD60G qIwkeA3jhRyeyWMUMuBbmHvKh/5gEhCW1gVdjQAZdkTQOD4L/7VUKXPwHQNW5AjE3X96 lfFc5Dteffc7PTjk32Cf8tVfKoEjFB4qG+wKW6651ounK5OZ2mBCNo9xtekeYBa7i7nl RaHw== 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=IYHdQ35LInehTjlqIXgGZX3aRBmz1zJteVJWJZCZuJs=; b=SYwRKDf67NUEEzQYDeoyuplq24r0ZcbpZ19hhx2Kj9WkJEnZpPLzt4z36//Pq+BRrh JOI4IF+OquJ/Orbjia8Jc2xcVTujGE5vbEm4KuHfd9jXC/uXdsgoItIcnxadZ07HK0a0 aYhzmLMScpsDgyf4WHaI9fu4VUqe1dYqcOAppsr724W/meb+YIHBFODAS3KvYftJluYB 2I7BDvSzTUlBP6kyxSu02BrzKYtKO0bce+VUqqnbCeoYqqN3qZmshanuD+qxFytJPkgb kIWuVq1vM9AJqi1GmP4iBp0GPaXwmwmwvXsEdS9phoxZ8aThifJqFJ4XW/FAlddX7mGM iCJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=loQLXjwZ; 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 a9si583439oif.124.2021.05.12.11.21.43; Wed, 12 May 2021 11:21:58 -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=loQLXjwZ; 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 S1354920AbhELSTF (ORCPT + 99 others); Wed, 12 May 2021 14:19:05 -0400 Received: from mail.kernel.org ([198.145.29.99]:48578 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236557AbhELQ3N (ORCPT ); Wed, 12 May 2021 12:29:13 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 71A476193B; Wed, 12 May 2021 15:56:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620835007; bh=gFfgXZKFMXOBQT9yKczwtHF1tf9sWuBiqcmXHsHq9Dc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=loQLXjwZ8sJS78PdIQRD8d3nzOnEXA2CPDTaCxtc2Qg1e/Kytp7bsB6R/2IXQpw5E rWT7bzhJj28cWbTSSUc9//+eDFTQtodu+f+qoWwVSD/3RV6L9jnocfzOgbZAaX5dIT XP8IdVNoyk76mvw/8PhqJlc2+OkVnMT8vA1N/P/k= 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.12 171/677] serial: stm32: fix tx_empty condition Date: Wed, 12 May 2021 16:43:37 +0200 Message-Id: <20210512144842.920528664@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@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 d205fce1950a..99dfa884cbef 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -515,7 +515,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