[{"id":1766186,"web_url":"http://patchwork.ozlabs.org/comment/1766186/","msgid":"<CAGkQfmOBNYeYTrbzAZBZ6cC5==Pfm6pZnho-9P8ggPjMZXX4nA@mail.gmail.com>","list_archive_url":null,"date":"2017-09-11T09:52:12","subject":"Re: [PATCH v1 10/10] tty/serial: atmel: Prevent a warning on suspend","submitter":{"id":8236,"url":"http://patchwork.ozlabs.org/api/people/8236/","name":"Romain Izard","email":"romain.izard.pro@gmail.com"},"content":"2017-09-08 17:36 GMT+02:00 Romain Izard <romain.izard.pro@gmail.com>:\n> The atmel serial port driver reported the following warning on suspend:\n> atmel_usart f8020000.serial: ttyS1: Unable to drain transmitter\n>\n> As the ATMEL_US_TXEMPTY status bit in ATMEL_US_CSR is always cleared\n> when the transmitter is disabled, we need to know the transmitter's\n> state to return the real fifo state. And as ATMEL_US_CR is write-only,\n> it is necessary to save the state of the transmitter in a local\n> variable, and update the variable when TXEN and TXDIS is written in\n> ATMEL_US_CR.\n>\n> After those changes, atmel_tx_empty can return \"empty\" on suspend, the\n> warning in uart_suspend_port disappears, and suspending is 20ms shorter\n> for each enabled Atmel serial port.\n>\n> Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>\n> ---\n>  drivers/tty/serial/atmel_serial.c | 13 +++++++++++++\n>  1 file changed, 13 insertions(+)\n>\n> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c\n> index 7551cab438ff..195c0d1b594e 100644\n> --- a/drivers/tty/serial/atmel_serial.c\n> +++ b/drivers/tty/serial/atmel_serial.c\n> @@ -171,6 +171,7 @@ struct atmel_uart_port {\n>         bool                    has_hw_timer;\n>         struct timer_list       uart_timer;\n>\n> +       bool                    tx_stopped;\n>         bool                    suspended;\n>         unsigned int            pending;\n>         unsigned int            pending_status;\n> @@ -380,6 +381,10 @@ static int atmel_config_rs485(struct uart_port *port,\n>   */\n>  static u_int atmel_tx_empty(struct uart_port *port)\n>  {\n> +       struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);\n> +\n> +       if (atmel_port->tx_stopped)\n> +               return TIOCSER_TEMT;\n>         return (atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXEMPTY) ?\n>                 TIOCSER_TEMT :\n>                 0;\n> @@ -485,6 +490,7 @@ static void atmel_stop_tx(struct uart_port *port)\n>          * is fully transmitted.\n>          */\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS);\n> +       atmel_port->tx_stopped = true;\n>\n>         /* Disable interrupts */\n>         atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask);\n> @@ -492,6 +498,7 @@ static void atmel_stop_tx(struct uart_port *port)\n>         if ((port->rs485.flags & SER_RS485_ENABLED) &&\n>             !(port->rs485.flags & SER_RS485_RX_DURING_TX))\n>                 atmel_start_rx(port);\n> +\n>  }\n>\n>  /*\n> @@ -521,6 +528,7 @@ static void atmel_start_tx(struct uart_port *port)\n>\n>         /* re-enable the transmitter */\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN);\n> +       atmel_port->tx_stopped = false;\n>  }\n>\n>  /*\n> @@ -1866,6 +1874,7 @@ static int atmel_startup(struct uart_port *port)\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);\n>         /* enable xmit & rcvr */\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN);\n> +       atmel_port->tx_stopped = false;\n>\n>         setup_timer(&atmel_port->uart_timer,\n>                         atmel_uart_timer_callback,\n> @@ -2122,6 +2131,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,\n>\n>         /* disable receiver and transmitter */\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS | ATMEL_US_RXDIS);\n> +       atmel_port->tx_stopped = true;\n>\n>         /* mode */\n>         if (port->rs485.flags & SER_RS485_ENABLED) {\n> @@ -2207,6 +2217,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,\n>         atmel_uart_writel(port, ATMEL_US_BRGR, quot);\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN);\n> +       atmel_port->tx_stopped = false;\n>\n>         /* restore interrupts */\n>         atmel_uart_writel(port, ATMEL_US_IER, imr);\n> @@ -2450,6 +2461,7 @@ static void atmel_console_write(struct console *co, const char *s, u_int count)\n>\n>         /* Make sure that tx path is actually able to send characters */\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN);\n> +       atmel_port->tx_stopped = false;\n>\n>         uart_console_write(port, s, count, atmel_console_putchar);\n>\n> @@ -2528,6 +2540,7 @@ static int __init atmel_console_setup(struct console *co, char *options)\n>         atmel_uart_writel(port, ATMEL_US_IDR, -1);\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);\n>         atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN);\n> +       atmel_port->tx_stopped = false;\n>\n>         if (options)\n>                 uart_parse_options(options, &baud, &parity, &bits, &flow);\n> --\n> 2.11.0\n>\n\nUnfortunately this patch was broken when I reported it from my branch to\nthe v4.13, as it does not build because of the missing declaration of\n'atmel_port' in 'atmel_console_setup'.\n\nI'll send a corrected version for v2.","headers":{"Return-Path":"<linux-pwm-owner@vger.kernel.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=linux-pwm-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tsecure) header.d=mobile-devices.fr header.i=@mobile-devices.fr\n\theader.b=\"sSOB3XLV\"; \n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"cJyRr5iJ\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xrNWm57Mbz9s7G\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 11 Sep 2017 19:52:36 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751445AbdIKJwf (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tMon, 11 Sep 2017 05:52:35 -0400","from mail-io0-f174.google.com ([209.85.223.174]:34356 \"EHLO\n\tmail-io0-f174.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751332AbdIKJwd (ORCPT\n\t<rfc822; linux-pwm@vger.kernel.org>); Mon, 11 Sep 2017 05:52:33 -0400","by mail-io0-f174.google.com with SMTP id v36so9664751ioi.1\n\tfor <linux-pwm@vger.kernel.org>; Mon, 11 Sep 2017 02:52:33 -0700 (PDT)","by 10.202.78.68 with HTTP; Mon, 11 Sep 2017 02:52:12 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=mobile-devices.fr; s=google;\n\th=mime-version:sender:in-reply-to:references:from:date:message-id\n\t:subject:to:cc;\n\tbh=QmWv6SUBu2Efj6pJ+AxjvuNZCr3UKMFQkAno+5fhgpo=;\n\tb=sSOB3XLVSbCc7bmRcBhJGB7/EI9ujLTKm4MbR0g1Tq18B5qB1JNu8EcsAqQ/N87ZuL\n\tmtrFqvWhW44QAlkKI88fHFTjutaYPHe23curwuCePVPh/pgcAZeuPusSasu5BlAeQ2gx\n\twxkf82bnCsjU5BQtRziq6PQFsAU6FJ9KmLPMs=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=mime-version:sender:in-reply-to:references:from:date:message-id\n\t:subject:to:cc;\n\tbh=QmWv6SUBu2Efj6pJ+AxjvuNZCr3UKMFQkAno+5fhgpo=;\n\tb=cJyRr5iJbshbq5gfG7racGcpHS6Cwiv/zPj2mXQ/SIhlmf3xVS0ExN2AnT7IKM9Qmy\n\tjSchXIW0G4bIEvWSV5nPim39dsppGIvl1Sl56XPpO1ByH+UHB8lzW/Vyewv1MIdCJVG9\n\tDikIHY3dtQPS2JT8wZ5Nxuyk5lx2iUFxtl7lNBjKR8mGB01Rsn5CQw7w2h3RzbbNeVYd\n\tCekbAPEkzhKHTyETRpjILMnFCfvoefTRqbLP8T0BMzyA+P9H4vfoDwuUzs/F61ftm6cl\n\tFD3xIlMk1mtB9dtVTyIU8hDtTSTGx5UR6Cipq8ChTqdZCfLn6PaehEJq7DWPLJQIY8yK\n\tKkjQ=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:sender:in-reply-to:references:from\n\t:date:message-id:subject:to:cc;\n\tbh=QmWv6SUBu2Efj6pJ+AxjvuNZCr3UKMFQkAno+5fhgpo=;\n\tb=jgwe5u+VSo62RX6Vvj/mFTAADUXaoJfjZVl/m3iTC47fZSsJwgN6us1crqwewOhkyF\n\tIOG09Honl13lmLv806W/D/d6tis2sWI30X3pU8nwzhwjk22Rww6XJ77wtU3ZE0MuS2UE\n\ttgRFPZWnonumUzwP8tg1tCdaVKuMFTbXCHlWe1/4TqGRPG5LBX+cVBtZZRjl1jSp27wJ\n\tRn7LOjOCygJSk7vC0wT6+M57EPRBpuLM4qW+QKt+k9fIE/vC/nunLevo9/rxsqYtQ0io\n\tiUmvFmIi2kEpoRaBZpbnzYNdeifE2kxbSSqr/5X+vV5FlB0PIkG6QkLakcgbXhsr2Da1\n\tQ4zQ==","X-Gm-Message-State":"AHPjjUgE46GDb4BtAZ5GsGMfEH8BDMY75/b4Ks8jjB6cPFYbCBHStK2V\n\tYBSeviMsWpoUygl5iVbgQI7Nto9k2aJy","X-Google-Smtp-Source":"AOwi7QBwE7SEhp7nN3KLRdj9Odnxl4WHMxQ7WbayCtUdRcb1QKDhb8LwK6WDYr9lrY81HqNNpXuB4J/pmZRNFG2fIJU=","X-Received":"by 10.202.81.147 with SMTP id f141mr9936755oib.160.1505123552570;\n\tMon, 11 Sep 2017 02:52:32 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<20170908153604.28383-11-romain.izard.pro@gmail.com>","References":"<20170908153604.28383-1-romain.izard.pro@gmail.com>\n\t<20170908153604.28383-11-romain.izard.pro@gmail.com>","From":"Romain Izard <romain.izard.pro@gmail.com>","Date":"Mon, 11 Sep 2017 11:52:12 +0200","X-Google-Sender-Auth":"fbg3wLgAXM8aSFC80ZhGE9IZhRs","Message-ID":"<CAGkQfmOBNYeYTrbzAZBZ6cC5==Pfm6pZnho-9P8ggPjMZXX4nA@mail.gmail.com>","Subject":"Re: [PATCH v1 10/10] tty/serial: atmel: Prevent a warning on suspend","To":"Nicolas Ferre <nicolas.ferre@microchip.com>,\n\tBoris Brezillon <boris.brezillon@free-electrons.com>,\n\tMichael Turquette <mturquette@baylibre.com>,\n\tStephen Boyd <sboyd@codeaurora.org>,\n\tLudovic Desroches <ludovic.desroches@microchip.com>,\n\tJonathan Cameron <jic23@kernel.org>, Wenyou Yang <wenyou.yang@atmel.com>,\n\tJosh Wu <rainyfeeling@outlook.com>,\n\tDavid Woodhouse <dwmw2@infradead.org>,\n\tBrian Norris <computersforpeace@gmail.com>,\n\tMarek Vasut <marek.vasut@gmail.com>,\n\tCyrille Pitchen <cyrille.pitchen@wedev4u.fr>,\n\tThierry Reding <thierry.reding@gmail.com>,\n\tRichard Genoud <richard.genoud@gmail.com>,\n\tGreg Kroah-Hartman <gregkh@linuxfoundation.org>,\n\tAlan Stern <stern@rowland.harvard.edu>","Cc":"linux-clk@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,\n\tlinux-iio@vger.kernel.org, linux-mtd <linux-mtd@lists.infradead.org>,\n\tlinux-pwm@vger.kernel.org, linux-serial@vger.kernel.org,\n\tlinux-usb@vger.kernel.org,\n\tlinux-arm-kernel <linux-arm-kernel@lists.infradead.org>,\n\tRomain Izard <romain.izard.pro@gmail.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Sender":"linux-pwm-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<linux-pwm.vger.kernel.org>","X-Mailing-List":"linux-pwm@vger.kernel.org"}}]