From patchwork Tue Apr 20 19:02:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Hodaszi X-Patchwork-Id: 424973 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E0EBC433ED for ; Tue, 20 Apr 2021 19:02:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E6734613C2 for ; Tue, 20 Apr 2021 19:02:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233675AbhDTTD0 (ORCPT ); Tue, 20 Apr 2021 15:03:26 -0400 Received: from outbound-ip24a.ess.barracuda.com ([209.222.82.206]:56478 "EHLO outbound-ip24a.ess.barracuda.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233548AbhDTTD0 (ORCPT ); Tue, 20 Apr 2021 15:03:26 -0400 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam08lp2046.outbound.protection.outlook.com [104.47.74.46]) by mx-outbound10-213.us-east-2a.ess.aws.cudaops.com (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 20 Apr 2021 19:02:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GaBabiOyVI5f/E9WND8EJ5gR6lvLDAkd6116vI+SwvKLhm3Nw7UVSQl4xHI+HiSFTBTjYfH5eVZS7uh9X/GCBAsXZaLdR9WamoENFeuUxiekXky7uDCi3Ar4FwemywjKGNBx8nn6BtvuKRtffeWUBWEdwdMLVJjSkAG6gQr5MxNnlx/b9azTB1M5hgiGOpS/bEKDyhmU5coMPytzPEMF0ETLwy52dwr9AYoCT7Qwrwq33mozN2WkYkZwWf9j4KCsjPoo77jgRsAWrPRunw58oygu+k90ONo9Hn3HkKHeiIWjF+XeiCRNwTok2JYuAqXgfyRJ1MGhPtRAbjJF5xVv5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XCVVwNQJbJNehT0mGAPBJQYMzI95puiBOtjKjCs7zec=; b=UTB2zAFx5BwKe4SOqvZ9e6y8vW1yuQDEAjy7CgEF783yXh+aQB63RtCmYjSrN2efKb0vQW+PftxcVdq1z83S/0GrjMy5QN5iU6zLbkatLjLaNZx+UiQAbxriSFxBpAB/BBgx258DK8XW8/j8YEFBbfP03C5P+Sc3nB3079C3bQPlIwOjKuq8FfyxM7oJaeSLx04IpL8/RwCWOMAMmHD8u1oewU6Sc13qbm8uE1z0eg6pcH9dqVtaGO1SYgClgm99986d5b2dMIs4Efl6KuE3SS1qjCnSzGlrSBhq0RFrhbbiRsxMeFK6ToeGfaJhylWpIKnzynVSBZxFBHbwyzbOzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=digi.com; dmarc=pass action=none header.from=digi.com; dkim=pass header.d=digi.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=digi.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XCVVwNQJbJNehT0mGAPBJQYMzI95puiBOtjKjCs7zec=; b=WCIUw9cyInkzqtKR/IlV7JiFOKtDUbGWXvO25T1yP2lJmPGx2JcANfnUpAwxq8bgMZStXHWLj/6YpmsCUnQClQ/YarIBn6OdGycohHwPW3k98u4XN4C+SE6t1WSr8bkfWq0t+wpg+K+v62Xa520X+wfTdVxPm+dxgiRYQX6Bh30= Received: from CO1PR10MB4561.namprd10.prod.outlook.com (2603:10b6:303:9d::15) by CO1PR10MB4578.namprd10.prod.outlook.com (2603:10b6:303:9e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.18; Tue, 20 Apr 2021 19:02:33 +0000 Received: from CO1PR10MB4561.namprd10.prod.outlook.com ([fe80::75d6:e217:6181:f5a5]) by CO1PR10MB4561.namprd10.prod.outlook.com ([fe80::75d6:e217:6181:f5a5%5]) with mapi id 15.20.4042.024; Tue, 20 Apr 2021 19:02:33 +0000 From: "Hodaszi, Robert" To: Greg Kroah-Hartman CC: Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , "linux-serial@vger.kernel.org" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , "Hodaszi, Robert" Subject: [PATCH v2] serial: imx: fix TX stop function not setting state to OFF Thread-Topic: [PATCH v2] serial: imx: fix TX stop function not setting state to OFF Thread-Index: AQHXNhe4tcX1Da9600Oe4OMrG+B/AQ== Date: Tue, 20 Apr 2021 19:02:33 +0000 Message-ID: <25c1a28dfb7f892a5c214ba7d8489879d7c0e4be.camel@digi.com> Accept-Language: hu-HU, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.4-0ubuntu1 authentication-results: linuxfoundation.org; dkim=none (message not signed) header.d=none; linuxfoundation.org; dmarc=none action=none header.from=digi.com; x-originating-ip: [81.183.32.32] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c3a990bc-d4dd-4a60-2610-08d9042edac9 x-ms-traffictypediagnostic: CO1PR10MB4578: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uCrKcwLiTGbvwxiCFvm8MdzCgPNqY5tAtV1vreVIT/7Ytmus4B6biD8yhTJEB1fjmDbjGOVaWchKx5YDo+c05E7MfyaYqI+8NsTqpyI+MLRKg2knDSDy4M6jrURXvVAiJvzeUYpbtenQtbA3flRbjM59tf8Xd2pyh7TxTkSqMptrD1qGhAjZxNh4CRjtSw+cQ4WbD5UdMLjzS3Ol0Qt8UC/wRdtbwkLJoTpo8qv7/gXU2dtykud6QWCzTRRLuD+jDxx4HM2rlDOnLvWcZvhRZ02XGbHrOHfpmbotMC1dbczn4mASy7R6qj/YqSAuUOShh7qN72gyp8wIJW01ViJyFojIwiNUhmAPGXrR8vEZbm8TgcVq5QCaHTcbQIuG8Hl2ug2NhpNBMdXOdf/lfvjY9wDyORKY3QQD207SFeTTGPQOSTOG4DkPT1J+hrOSM311c3nVGfYIMs4K/gXvirlC0yDb2ehSQ/j3d9Pe4gO4DhE9pUC/6nrqIVC7l+aTU6m80baW6Sh6OZ6glMNNv4ABnWVj0X8YTbtaNkVUr5zv/KLHUrmljGU95P/FkDA9KYhItWhZ04QmRmDEW3EgIOTrqa5PutinhNVQcAI6DMA3paQ= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO1PR10MB4561.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(366004)(396003)(39850400004)(346002)(5660300002)(316002)(8676002)(478600001)(83380400001)(38100700002)(54906003)(66476007)(71200400001)(6916009)(66556008)(64756008)(76116006)(4326008)(2616005)(6512007)(26005)(8936002)(6506007)(66946007)(66446008)(91956017)(107886003)(186003)(6486002)(36756003)(86362001)(122000001)(2906002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?q?rasU2t+uZv/oCOgp0wn7zvDXmb0?= =?utf-8?q?Wfq0MLWwWapdqKbYfv37EEzH8No/g14dP+bEhqzCWoMsYt3tTUKmyPHV?= =?utf-8?q?hpW+UWBv/CITSt/Q68HOrhifPzj4nUDbbI2o3x2YtdTrICsktCQ8HjUf?= =?utf-8?q?rUHdsFun1LrqV9FdnVoppxzOiVyMbNI2hd80yM2IMhwH1gM5h+CGgSwx?= =?utf-8?q?yy+BukWqznqDoYNAaPWhl7JwFq2P9SiH2go8xyQzTyepYt3EYAV6ADzb?= =?utf-8?q?tFekeZKUwLDjdCPzgBDwRywfJDhYTEMHIDcGMEg7ZGG72pBPCpCqBVNN?= =?utf-8?q?cnvqzI9d2pHDeOi7wXkwO2CIGbCtJJ+4HiGuvv8t7RTJjcaIX+3+GIoV?= =?utf-8?q?7hCJFoaci5tG8Pjd4QfLhKYfpMKBhAhP9hIr2Jy1D8Ac8f1VmG/FamgJ?= =?utf-8?q?ngQcGgOK82MVh45V/pokCPN5D5mdg4UVZnYrCFCrZqT9AzOVVe2KL/Xl?= =?utf-8?q?wLdw8J0BE3mUSNbXmzmz1QAuxRrPFhD0QkNq2rKTmgi8YzkBDv7UPe9a?= =?utf-8?q?2OC0N42Ts4wRHtCTnFbl9Ioj4d75it0wiAQ1AgvUGyYOFYEQ2DuKvC1N?= =?utf-8?q?D8iVW35wF3wyYIYpVCj4fsa2lHfvpM7xUmbg6tnq9KQvNG02qC5r3ZOC?= =?utf-8?q?4Y3fC/gnhCccuJ/p5jXAU+3DEfGHEvDz/HUQqBKextHPQeXVOmPL564c?= =?utf-8?q?j9IvgI9lhIwpvqCLbDX8rUrHCpE09xIHwlNjPYfet+4/tx9quDTUqQHx?= =?utf-8?q?xsB8wYbiaJhM1RTBUE0mdTtIdeeLwIvJkkCbUS6A/wfcjCuOw7rtnz0T?= =?utf-8?q?C234DTKQcMYy6oVLiKM/LJTfofICCbvv1ge4BT4gnnx3z/IQFSQaxmz6?= =?utf-8?q?FpVgvRbidEDSqdJLd49xTD9wi97pbaKNg/Zoi0O9cq6zuNJnx5f/WpYs?= =?utf-8?q?5Vhy3qSFN/7RIGSBMP11qq0QBemynrlQ6Zg9cm9GnDnQ2hdt9bmZ7c2K?= =?utf-8?q?4ap0kRcudvlbPgQTKkMiQu6thjA1dmLZ8P+pF3de8IkjMQusk4OX5R0u?= =?utf-8?q?qsdi3KMmuuRh4jIOjtZJNYrsFK2uLbTmfy/N28jWFgYhP+fzdhOUK0du?= =?utf-8?q?6AUUPRoc0/SKXPx1CcTTVnPUO7X15qFDSD05Suyo3xcM6e9j4cnc0GM+?= =?utf-8?q?BRGlbI7257wSIK0WSFOyATSqMyAVb/fijx4SGKKIHeAHrqHbqVS+/w4R?= =?utf-8?q?70MjK1EpXydAjQG3bntKN8emEulQEdOooTjFHanpp4mvI8djPf1cu3ia?= =?utf-8?q?a/mhFzr/vL0eC7Vd/jZiZ6uiHTzY1K/qINHBiJDwFiPZxJ63/hbSLV6w?= =?utf-8?q?kZcrwobvAUFCkc0YKJs9Wp5T9xwfX?= Content-ID: <26FA231F7E4D444C8F7AA6FC732A4FB2@namprd10.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: digi.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR10MB4561.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3a990bc-d4dd-4a60-2610-08d9042edac9 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Apr 2021 19:02:33.3744 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: abb4cdb7-1b7e-483e-a143-7ebfd1184b9e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5vbPUH6PscsB6yRB9H1jPnX2EI2ELOYYtksUcHc450JpAwrHKn018KMQqhu/Qe/MMYysH6VNGVj7rzQsdBurng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR10MB4578 X-BESS-ID: 1618945357-102773-14008-5075-1 X-BESS-VER: 2019.1_20210420.1810 X-BESS-Apparent-Source-IP: 104.47.74.46 X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.231691 [from cloudscan20-226.us-east-2b.ess.aws.cudaops.com] Rule breakdown below pts rule name description ---- ---------------------- -------------------------------- 0.00 BSF_BESS_OUTBOUND META: BESS Outbound X-BESS-Outbound-Spam-Status: SCORE=0.00 using account:ESS112744 scores of KILL_LEVEL=7.0 tests=BSF_BESS_OUTBOUND X-BESS-BRTS-Status: 1 Precedence: bulk List-ID: X-Mailing-List: linux-serial@vger.kernel.org If the mode had been changed to RS-485 after at least one character had been sent in RS-232 mode, the RS-485 transmission was not working. Commit cb1a609236096c278ecbfb7be678a693a70283f1 ("serial: imx: implement rts delaying for rs485") added a TX state variable to keep track, when it needs to enable / disable the RS-485 transmitter. In RS-232 mode, the start TX function just sets the state to SEND, and the stop function supposed to set it to OFF. In RS-485 mode, the start TX function expects the state to be either OFF, WAIT_AFTER_SEND, or WAIT_AFTER RTS. It cannot do anything if the state is set to SEND, expects a stop first. But stop TX function in RS-232 mode usually didn't set the state to OFF, as it first checked if the shifter is empty, and if not, it just returned, waiting for a TransmitComplete interrupt, which is only enabled in RS-485 mode. So the stop function was never called again. That check, and the subsequent code part is not needed for RS-232, it just have to set the TX state to OFF. Signed-off-by: Robert Hodaszi --- Changes in v2: - Fixed incorrect tabs drivers/tty/serial/imx.c | 46 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 22 deletions(-) -- 2.27.0 diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 8257597d034d..511badce3edd 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -443,6 +443,12 @@ static void imx_uart_stop_tx(struct uart_port *port) ucr1 = imx_uart_readl(sport, UCR1); imx_uart_writel(sport, ucr1 & ~UCR1_TRDYEN, UCR1); + if (!(port->rs485.flags & SER_RS485_ENABLED)) { + /* Set the TX state in non-RS485 mode, nothing else to do */ + sport->tx_state = OFF; + return; + } + usr2 = imx_uart_readl(sport, USR2); if (!(usr2 & USR2_TXDC)) { /* The shifter is still busy, so retry once TC triggers */ @@ -453,33 +459,29 @@ static void imx_uart_stop_tx(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); - /* in rs485 mode disable transmitter */ - if (port->rs485.flags & SER_RS485_ENABLED) { - if (sport->tx_state == SEND) { - sport->tx_state = WAIT_AFTER_SEND; - start_hrtimer_ms(&sport->trigger_stop_tx, - port->rs485.delay_rts_after_send); - return; - } + if (sport->tx_state == SEND) { + sport->tx_state = WAIT_AFTER_SEND; + start_hrtimer_ms(&sport->trigger_stop_tx, + port->rs485.delay_rts_after_send); + return; + } - if (sport->tx_state == WAIT_AFTER_RTS || - sport->tx_state == WAIT_AFTER_SEND) { - u32 ucr2; + if (sport->tx_state == WAIT_AFTER_RTS || + sport->tx_state == WAIT_AFTER_SEND) { + /* in rs485 mode disable transmitter */ + u32 ucr2; - hrtimer_try_to_cancel(&sport->trigger_start_tx); + hrtimer_try_to_cancel(&sport->trigger_start_tx); - ucr2 = imx_uart_readl(sport, UCR2); - if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND) - imx_uart_rts_active(sport, &ucr2); - else - imx_uart_rts_inactive(sport, &ucr2); - imx_uart_writel(sport, ucr2, UCR2); + ucr2 = imx_uart_readl(sport, UCR2); + if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND) + imx_uart_rts_active(sport, &ucr2); + else + imx_uart_rts_inactive(sport, &ucr2); + imx_uart_writel(sport, ucr2, UCR2); - imx_uart_start_rx(port); + imx_uart_start_rx(port); - sport->tx_state = OFF; - } - } else { sport->tx_state = OFF; } }