All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergey Organov <sorganov@gmail.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-arm-kernel@lists.infradead.org,
	linux-serial@vger.kernel.org, NXP Linux Team <linux-imx@nxp.com>
Subject: Re: [PATCH v2 6/7] serial: imx: set_mctrl(): correctly restore autoRTS state
Date: Thu, 27 Jun 2019 10:01:54 +0300	[thread overview]
Message-ID: <87imsrik9p.fsf@osv.gnss.ru> (raw)
In-Reply-To: <20190627060537.brmgsmoh3usr4vo6@pengutronix.de> ("Uwe \=\?utf-8\?Q\?Kleine-K\=C3\=B6nig\=22's\?\= message of "Thu, 27 Jun 2019 08:05:37 +0200")

Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes:

> On Wed, Jun 26, 2019 at 05:11:32PM +0300, Sergey Organov wrote:
>> imx_uart_set_mctrl() happened to set UCR2_CTSC bit whenever TIOCM_RTS
>> was set, no matter if RTS/CTS handshake is enabled or not. Now fixed by
>> turning handshake on only when CRTSCTS bit for the port is set.
>> 
>> Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
>> Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
>> Signed-off-by: Sergey Organov <sorganov@gmail.com>
>> ---
>>  drivers/tty/serial/imx.c | 13 +++++++++++--
>>  1 file changed, 11 insertions(+), 2 deletions(-)
>> 
>> diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
>> index 4867f80..171347d 100644
>> --- a/drivers/tty/serial/imx.c
>> +++ b/drivers/tty/serial/imx.c
>> @@ -970,10 +970,19 @@ static void imx_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
>>  	if (!(port->rs485.flags & SER_RS485_ENABLED)) {
>>  		u32 ucr2;
>>  
>> +		/*
>> +		 * Turn off autoRTS (UCR2_CTSC) if RTS is lowered and restore
>> +		 * autoRTS setting if RTS is raised. Inverted UCR2_IRTS is set
>> +		 * if and only if CRTSCTS bit is set for the port, so we use it
>> +		 * to get the state to restore to.
>> +		 */
>
> The comment is quite complicated. I like the comments of Sascha's patch
> that addressed the same issue better.

This one is simply modeled after similar comments in other drivers,
then adding the specifics.

> Are you using UCR2_IRTS as an indicator if CRTSCTS is set? If it's that
> what you intend to express in the second sentence that is hard to grasp.
> Something like:
>
> 	UCR2_IRTS is unset iff the port is configured for CRTSCTS

Yeah, exactly. Fine, I'll change this, thanks!

>
> Also as the value of the CTS bit doesn't matter if CTSC is set, the
> order of the checks could be swapped to result in easier code (IMHO at
> least) that doesn't need a nested if.
>
> Something like:
>
> 	ucr2 = imx_uart_readl(sport, UCR2);
> 	ucr2 &= ~(UCR2_CTS | UCR2_CTSC);
>
> 	/* UCR2_IRTS is unset iff the port is configured for CRTSCTS */
> 	crtscts = !(ucr2 & UCR2_IRTS);
>
> 	if (!(mctrl & TIOCM_RTS)) {
> 		/* Force RTS inactive, i.e. UCR2_CTS=0 and UCR2_CTSC=0 */
> 	} else if (crtscts) {
> 		/* let the receiver control RTS */
> 		ucr2 |= UCR2_CTSC;
> 	} else {
> 		/* Force RTS active */
> 		ucr2 |= UCR2_CTS;
> 	}

Right, this is functionally correct as well, and thus it's a matter of
taste, but I still believe that what I suggested is better:

	ucr2 = imx_uart_readl(sport, UCR2);
	ucr2 &= ~(UCR2_CTS | UCR2_CTSC);
	if (mctrl & TIOCM_RTS) {
		ucr2 |= UCR2_CTS;
		if (!(ucr2 & UCR2_IRTS))
			ucr2 |= UCR2_CTSC;
	}

First, it always sets hardware RTS according to TIOCM_RTS, that IMHO is
less surprising than clearing hardware RTS bit when port is configured
CRTSCTS.

Second, (unfortunate) inter-dependency between TIOCM_RTS and CRTSCTS is
better isolated, so to get rid of it (even if only mentally), only
removals are required, that reduces the code to quite obvious:

	ucr2 = imx_uart_readl(sport, UCR2);
	ucr2 &= ~(UCR2_CTS);
	if (mctrl & TIOCM_RTS)
		ucr2 |= UCR2_CTS;

Thanks!

-- Sergey

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-06-27  7:01 UTC|newest]

Thread overview: 154+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-14  7:28 [PATCH] serial: imx: fix RTS/CTS setting Sascha Hauer
2019-06-14  7:28 ` Sascha Hauer
2019-06-14  7:48 ` Uwe Kleine-König
2019-06-14  7:48   ` Uwe Kleine-König
2019-06-14 12:11 ` [PATCH RFC 0/7] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-06-14 12:11   ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 1/7] serial: imx: fix locking in set_termios() Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 2/7] serial: imx: set_termios(): factor-out 'ucr2' initial value Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 3/7] serial: imx: set_termios(): clarify RTS/CTS bits calculation Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 4/7] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-20  9:37     ` Sascha Hauer
2019-06-20  9:37       ` Sascha Hauer
2019-06-20 13:24       ` Sergey Organov
2019-06-20 13:24         ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 5/7] serial: imx: set_termios(): preserve RTS state Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-14 13:05     ` Lothar Waßmann
2019-06-14 13:28       ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 6/7] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-14 12:11   ` [PATCH RFC 7/7] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-06-14 12:11     ` Sergey Organov
2019-06-20 14:47 ` [PATCH RFC v1 0/7] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 1/7] serial: imx: fix locking in set_termios() Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 2/7] serial: imx: set_termios(): factor-out 'ucr2' initial value Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 3/7] serial: imx: set_termios(): clarify RTS/CTS bits calculation Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 4/7] serial: imx: set_termios(): preserve RTS state Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 5/7] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 6/7] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-20 14:47   ` [PATCH RFC v1 7/7] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-06-20 14:47     ` Sergey Organov
2019-06-26 10:00   ` [PATCH RFC v1 0/7] serial: imx: fix RTS and RTS/CTS handling Sascha Hauer
2019-06-26 10:00     ` Sascha Hauer
2019-06-26 11:19     ` Sergey Organov
2019-06-26 11:19       ` Sergey Organov
2019-06-26 14:11 ` [PATCH v2 " Sergey Organov
2019-06-26 14:11   ` [PATCH v2 1/7] serial: imx: fix locking in set_termios() Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  5:05     ` Uwe Kleine-König
2019-06-27  5:05       ` Uwe Kleine-König
2019-06-26 14:11   ` [PATCH v2 2/7] serial: imx: set_termios(): factor-out 'ucr2' initial value Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  5:05     ` Uwe Kleine-König
2019-06-27  5:05       ` Uwe Kleine-König
2019-06-26 14:11   ` [PATCH v2 3/7] serial: imx: set_termios(): clarify RTS/CTS bits calculation Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  5:26     ` Uwe Kleine-König
2019-06-27  5:26       ` Uwe Kleine-König
2019-06-27  5:58       ` Sergey Organov
2019-06-26 14:11   ` [PATCH v2 4/7] serial: imx: set_termios(): preserve RTS state Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  5:40     ` Uwe Kleine-König
2019-06-27  5:40       ` Uwe Kleine-König
2019-06-27  6:15       ` Sergey Organov
2019-06-26 14:11   ` [PATCH v2 5/7] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  5:47     ` Uwe Kleine-König
2019-06-27  5:47       ` Uwe Kleine-König
2019-06-27  6:16       ` Sergey Organov
2019-06-26 14:11   ` [PATCH v2 6/7] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  6:05     ` Uwe Kleine-König
2019-06-27  6:05       ` Uwe Kleine-König
2019-06-27  7:01       ` Sergey Organov [this message]
2019-06-26 14:11   ` [PATCH v2 7/7] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-06-26 14:11     ` Sergey Organov
2019-06-27  6:08     ` Uwe Kleine-König
2019-06-27  6:08       ` Uwe Kleine-König
2019-06-27  7:58       ` Sergey Organov
2019-07-04 13:00 ` [PATCH v3 0/7] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-07-04 13:00   ` [PATCH v3 1/7] serial: imx: fix locking in set_termios() Sergey Organov
2019-07-04 13:00   ` [PATCH v3 2/7] serial: imx: set_termios(): factor-out 'ucr2' initial value Sergey Organov
2019-07-04 13:00   ` [PATCH v3 3/7] serial: imx: set_termios(): clarify RTS/CTS bits calculation Sergey Organov
2019-07-04 13:00     ` Sergey Organov
2019-07-04 13:00   ` [PATCH v3 4/7] serial: imx: set_termios(): preserve RTS state Sergey Organov
2019-07-04 13:00     ` Sergey Organov
2019-07-04 13:00   ` [PATCH v3 5/7] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-07-04 13:00     ` Sergey Organov
2019-07-04 13:00   ` [PATCH v3 6/7] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-07-04 13:00     ` Sergey Organov
2019-07-04 13:00   ` [PATCH v3 7/7] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-07-04 13:00     ` Sergey Organov
2019-07-19  8:47 ` [PATCH v4 0/3] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-07-19  8:47   ` [PATCH v4 1/3] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-07-19  8:47     ` Sergey Organov
2019-07-19  9:11     ` Uwe Kleine-König
2019-07-19  9:11       ` Uwe Kleine-König
2019-07-19 12:18       ` Sergey Organov
2019-07-19 14:31         ` Uwe Kleine-König
2019-07-19 14:31           ` Uwe Kleine-König
2019-07-19 15:13           ` Sergey Organov
2019-07-19 20:19             ` Uwe Kleine-König
2019-07-19 20:19               ` Uwe Kleine-König
2019-07-22  7:42               ` Sergey Organov
2019-07-22  7:51                 ` Uwe Kleine-König
2019-07-22  7:51                   ` Uwe Kleine-König
2019-07-22  9:20                   ` Sergey Organov
2019-07-22  9:46                     ` Uwe Kleine-König
2019-07-22  9:46                       ` Uwe Kleine-König
2019-07-22 13:54                       ` Sergey Organov
2019-07-22 16:47                         ` Uwe Kleine-König
2019-07-22 16:47                           ` Uwe Kleine-König
2019-07-22  9:57                   ` Russell King - ARM Linux admin
2019-07-22  9:57                     ` Russell King - ARM Linux admin
2019-07-22 10:04                     ` Uwe Kleine-König
2019-07-22 10:04                       ` Uwe Kleine-König
2019-07-22 10:17                       ` Russell King - ARM Linux admin
2019-07-22 10:17                         ` Russell King - ARM Linux admin
2019-07-19  8:47   ` [PATCH v4 2/3] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-07-19  8:47     ` Sergey Organov
2019-07-19  8:47   ` [PATCH v4 3/3] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-07-19  8:47     ` Sergey Organov
2019-07-22  9:22 ` [PATCH v5 0/3] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-07-22  9:22   ` [PATCH v5 1/3] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-07-22  9:54     ` Uwe Kleine-König
2019-07-22  9:54       ` Uwe Kleine-König
2019-07-22 13:57       ` Sergey Organov
2019-07-22 16:20         ` Uwe Kleine-König
2019-07-22 16:20           ` Uwe Kleine-König
2019-07-22 19:09           ` Sergey Organov
2019-07-22  9:22   ` [PATCH v5 2/3] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-07-22  9:22   ` [PATCH v5 3/3] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-07-22 19:22 ` [PATCH v6 0/3] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-07-22 19:22   ` [PATCH v6 1/3] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-07-22 19:22   ` [PATCH v6 2/3] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-07-22 20:24     ` Uwe Kleine-König
2019-07-22 20:24       ` Uwe Kleine-König
2019-07-23  9:20       ` Sergey Organov
2019-07-23  9:49         ` Uwe Kleine-König
2019-07-23  9:49           ` Uwe Kleine-König
2019-07-23 11:16           ` Sergey Organov
2019-07-23 11:30           ` Sergey Organov
2019-07-22 19:22   ` [PATCH v6 3/3] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-07-26 18:52 ` [PATCH v7 0/3] serial: imx: fix RTS and RTS/CTS handling Sergey Organov
2019-07-26 18:52   ` [PATCH v7 1/3] serial: imx: set_termios(): do not enable autoRTS if RTS is unset Sergey Organov
2019-07-26 18:52   ` [PATCH v7 2/3] serial: imx: set_mctrl(): correctly restore autoRTS state Sergey Organov
2019-07-26 18:52     ` Sergey Organov
2019-07-26 18:52   ` [PATCH v7 3/3] serial: imx: get rid of imx_uart_rts_auto() Sergey Organov
2019-07-26 18:52     ` Sergey Organov
2019-07-26 19:29     ` Uwe Kleine-König
2019-07-26 19:29       ` Uwe Kleine-König
2019-07-29  9:03       ` Sergey Organov
2019-07-29  9:29         ` Uwe Kleine-König
2019-07-29  9:29           ` Uwe Kleine-König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87imsrik9p.fsf@osv.gnss.ru \
    --to=sorganov@gmail.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-serial@vger.kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=u.kleine-koenig@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.