From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752643AbcFIP1n (ORCPT ); Thu, 9 Jun 2016 11:27:43 -0400 Received: from mail-am1on0144.outbound.protection.outlook.com ([157.56.112.144]:44557 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932301AbcFIP0f (ORCPT ); Thu, 9 Jun 2016 11:26:35 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=bhuvanchandra.dv@toradex.com; From: Bhuvanchandra DV To: CC: , , , , , , , , , Subject: [PATCH 1/8] tty: serial: fsl_lpuart: consider TX FIFO too in tx_empty Date: Thu, 9 Jun 2016 20:40:32 +0530 Message-ID: <20160609151039.20817-2-bhuvanchandra.dv@toradex.com> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20160609151039.20817-1-bhuvanchandra.dv@toradex.com> References: <20160609151039.20817-1-bhuvanchandra.dv@toradex.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [115.115.243.34] X-ClientProxiedBy: SIXPR04CA0050.apcprd04.prod.outlook.com (10.162.171.40) To DB4PR05MB270.eurprd05.prod.outlook.com (10.242.158.24) X-MS-Office365-Filtering-Correlation-Id: 9199f534-0e30-48c6-ef7c-08d390784c3c X-Microsoft-Exchange-Diagnostics: 1;DB4PR05MB270;2:VTOLBdXcXyDkpcMUcz/XTCSB+ZsK5xuCeRCrQVMF5x7alHHisSrQhwgqO/sK7A1zStmmHuDDBvOvFGEcpvo7OOyS1h6FcXkd5+ac2iyEo2djUpVlnX++TPkk2SGMIvZ6DYw6dD45N/11zcpipOPl2TpERgK1CXjuj0NoohFE6uJ7Gj+ITXgvuRoG/eb4eUjP;3:2GNSw+8LUO68JENQM28zbohgtsATFcy75EsW0evXU8w20NzydGw30o1cdpwP43UT9hvnCi+EIERlCKfNmuI18qDniyLo7LvuIKVfBRHCGfTQ5Kna/E0WyjlyKgvkppI1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB4PR05MB270; X-Microsoft-Exchange-Diagnostics: 1;DB4PR05MB270;25:tnk/BLwgibcPRrh/EGT18i/DQci2Kacdtc0bDb6Fq2SbJ5M69Wc9WS9OYYOGpPVoQCU8z8vofm1eg7YpU8sWPNyVe6zrEv7tsCFGv9eeqKNHqzSUe3d+Syk5z6rgUgprDT2YlSnMDAl56OTPdA6aUWRugHqCym5UaZuC5058KeDFNKigsjaPgxjQ0NvuAht3cBgad1pcTL0h64aqq+wY0rqVGH5hhRtNUqahCQ+BkAlMmzlq8FkDaMl3WfuivUIB/ZXfNwev5VOc5clppsw82d7LWoTjesK8StBQGHt/f/2dw3vrmVuBSx4kYvpB9j4RaRRwT3MTJfkX9A4odHimEcqFu5DvMhSBRRbbC47BisHwNijptxqCY7/ItYCUI41/FHIByeHo7lzgRij9SZ4g38RehYJMfBvtNsR6+I7aM/jgWS79DUv8gVJUeJe64tMg2dVROEwlzw9YwNVxy0NbOtXitE8PWbQbgN1lCw6eoYETUtgNlj0eb6DnQxp63X67c/7c0+FGjHkMXWvaRLOjA2ym5q/h3jTkqGa50hgzYUUQ8RC6tuG5BoYTGsavPJLhvYsWjh7/rOOnrQxiBQFqsd0TDwGsDUzz9sMATLzHsVl0WO3mXPdYE0qL17YC8iesIzXwvazs3K11PbVEA+wQrufgRXmhZ4bp98xRlw19UBXPI6sTSJb13un5HbCZ8rFo7Xu7o3qLd/Efdff7iCZXqQ== X-Microsoft-Exchange-Diagnostics: 1;DB4PR05MB270;20:t5i44XTVlAZSu/L0SyWOeB7Mav7YO+9sdXMGkryBTfIVZ8PaXef5MI7Bu/dKoB0VbeXIPwKpQFzb+ZcL0fJzmMOKC/IeVtFmDmtyRry/mH+lem+7Cwpzp+oaTS1fCQau27ZKVLMbLfqRJICp9u/uM2USvSuox2Ms+m82nHbbwpn4xKpGzn5Cod3Somd07Lm9CEN5J/FGVxzqzj/BU47+T03mXM/spy6Lm65WKBm6wgX4yiGR5wnmSD3F2lk1qjtZtjtQBmkVpnVKOfzfeCYh1zDL7QiHCULHqbPFu8iHdSm2IvsjoLthbRQFlYvXAKHYAcqQDu1bB6p4tqJI5dNFOg==;4:jG1fH8NE9dVvUYWT02oVPcMnc0OfE7h1FCIxjwXWv9VQiPfd/SYw9ocmCkHRrwyd/cacvmnATDrrSanPe+9Mvs0e/lQ0s/d1ZiAVesUrf5DVovHqDIbW0XRXg1T5pFlwWCAzXxTLI/eqNa60FRUMJBrCQ1tTvjRwJASxMcshNt/6LL8olD2RiTT5/f8PeDPueZeYmOLsdWv1Y0o0BhMbWCwbgJFtoSrOzSrBUw40FOKAty8ZwGr5nQkAIZxQlKRdEfysmoehVlaBs+aXTgH3QPuYGkW7FugFfzDKNBF6vJ1lxohUo0ns8iCO8eRt62Ocx+jU16qGG1Jd4xVaJI8N30NVLCfAXRhZ0V9SqnraJ2UCcBHgu/M0KnSBJn9aCcaz X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:DB4PR05MB270;BCL:0;PCL:0;RULEID:;SRVR:DB4PR05MB270; X-Forefront-PRVS: 0968D37274 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(189002)(199003)(36756003)(50466002)(42186005)(1076002)(86362001)(19580395003)(69596002)(48376002)(5008740100001)(81156014)(19580405001)(97736004)(4326007)(2906002)(77096005)(101416001)(81166006)(50226002)(2950100001)(33646002)(6116002)(68736007)(2351001)(3846002)(5003940100001)(105586002)(110136002)(106356001)(53416004)(229853001)(50986999)(8676002)(189998001)(92566002)(5004730100002)(66066001)(586003)(76176999)(47776003);DIR:OUT;SFP:1102;SCL:1;SRVR:DB4PR05MB270;H:tdx-in-nb-0014.toradex.ext;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB4PR05MB270;23:EYwuEVndBTAKad4WZxQojoWP2PAm39kX6VKbTzJzc2?= =?us-ascii?Q?/GxgXxBh9wXD9YiZLzi0eqAzG69ryA8W8uhqjAzjAPP4PDlYzrpqd+n6Pnwb?= =?us-ascii?Q?KvbWl+IuWs0Bv+shc5ME2alPk9ziM+SEwTFq5byUIjp2eAH9Naqln1aKOHBe?= =?us-ascii?Q?bmx1HjqQQHpqkQt7v9OgBdHzZOBznDoaYHQvvYwPwfbF1m/tXJVWtnWCtQBY?= =?us-ascii?Q?8/UbT9WJ1F0dP0DSCIYM9T0vl4spXHeRce9adE+IlEbrGG+ksC8iJ3lAEBd9?= =?us-ascii?Q?hFig+OOQltLSQr19VHkMM2hYrtcnVF5kuAKrMMvOS1QVv/s1AFHwvuxvvxEg?= =?us-ascii?Q?xKkyQrJo6Y9aZw3iU07ZY9xOJMQaR3aHsTzC37h9tCBgI7fACEAH+V6oS9/R?= =?us-ascii?Q?ELuOKpzg8krJZ87/cUaYPk01zOBGKcxzqeX8f6YA121dYL5xB/Xb+8Yqw5Zz?= =?us-ascii?Q?PdhPmeB/GO1RItMkeE9qJq1eii5HjcXQu4zKWk5lejoGulaOrlUoEpx39/CC?= =?us-ascii?Q?0BXjRhd+MPvq94f+GmfJHMuSp66lfR7xMd2u7Qudy2gxIKgZZLJ9kKkMZkKU?= =?us-ascii?Q?tf5ECBWiYED84XBW3rVO77viIaXMjWyEncQmzD2+HIv91O4RPiOADY75rkL+?= =?us-ascii?Q?tUBvKCy7EWjhD/8893cVCCxOdJS5QnIFCuDY9D8aOMELi8U1pHT+omptLkAt?= =?us-ascii?Q?cN2jaMKxqjg9VYn0t5jFuTLOBacvqckXEgaWxuiILw4d6nuehCwJhK23iSHi?= =?us-ascii?Q?PIQDTpt+u9E/TPsjIg299Dhx5EH9n7E0q/nx9CmOV/jTq6r6MyyhWhKsS80P?= =?us-ascii?Q?VLxZ8c7Uqy7OrrnNO81KS4eVeAK4lQ+tmab9GIYsMnV4TYtmv3ClQ/mAGMYz?= =?us-ascii?Q?UbfY/6XZQb83ug6bzHESn1ue8Rebavq1Thkku22SPxxhHaDBXhzb7tMDolrH?= =?us-ascii?Q?qvAfib5k/sO5kgmfI6BlHbTLD7gJbVzu3XG/zKfIFSE6S3QQ6rAoBXvb3G/a?= =?us-ascii?Q?VsuO5gdaWyBImHvdVrXXlE+KCXgKLh6D4xX7ZUlDL6fTk2mRHhS81s+mP38Q?= =?us-ascii?Q?2zsKS2FYXPXBQ0Ow2C9yiDU638k6BqMEY2vdmX4n1c58Z8rqBLRYngdNxTqX?= =?us-ascii?Q?pyIh6wm3c=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB4PR05MB270;5:QEKKEf/n8Dl7s1+9ilOIWZl2pLi5pAKM9NHCkBx7NdiXdUUGsTjtscV/Id01OeePgfJCpoaKLaOpADt5Jm5aagxeF2L71KrT1LB8XkoMboLAg8Ny5YKCtXor1OApplgHKseMZrsPci+Q7IX0d2Wuow==;24:MTsCwWxPuq94PeZq8QJw+Cq5TD16IMaLNvZxp13OfR3EXGz0Rj+i0XPwqBNiAfjUXDmrpSjDrnjIdJM6p2/EB4Qw8NDmxOeOPZsxDV+ZyG8=;7:VvGT396uNVCnkSjfnlf1eqo4Keu9Gn+aeI58WGW9f2rKKUPJj8Athxg9VvSaG77LqxS4Zjh4ZByp5G1hqCdOv0euiabJddWLm9tFYWZ45RGiPiYGXnWGnQaHSIXCMXN2MynE9vTGGxe/QCx7k+9VP87WPztydVT73z9b/GlJ4uCGQne0Qui+ICXwugj/FiqEvnRFoWlyTgF7AtHfp4w6sQ== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: toradex.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2016 15:11:09.3283 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR05MB270 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stefan Agner Currently the tx_empty callback only considers the Transmit Complete Flag (TC). The reference manual is not quite clear if the TC flag covers the TX FIFO too. Debug prints on real hardware have shown that from time to time the TC flag is asserted (indicating Transmitter idle) while there are still data in the TX FIFO. Hence, in this case the serial core will call the shutdown callback even though there are data remaining in the TX FIFO buffers. Avoid early shutdowns by considering the TX FIFO empty flag too. Also avoid theoretical race conditions between DMA and the driver by checking whether the TX DMA is in progress too. Signed-off-by: Stefan Agner --- drivers/tty/serial/fsl_lpuart.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 3d79003..fabfa7e 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -810,8 +810,18 @@ static irqreturn_t lpuart32_int(int irq, void *dev_id) /* return TIOCSER_TEMT when transmitter is not busy */ static unsigned int lpuart_tx_empty(struct uart_port *port) { - return (readb(port->membase + UARTSR1) & UARTSR1_TC) ? - TIOCSER_TEMT : 0; + struct lpuart_port *sport = container_of(port, + struct lpuart_port, port); + unsigned char sr1 = readb(port->membase + UARTSR1); + unsigned char sfifo = readb(port->membase + UARTSFIFO); + + if (sport->dma_tx_in_progress) + return 0; + + if (sr1 & UARTSR1_TC && sfifo & UARTSFIFO_TXEMPT) + return TIOCSER_TEMT; + + return 0; } static unsigned int lpuart32_tx_empty(struct uart_port *port) -- 2.8.3