From: Sergey Organov <sorganov@gmail.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: linux-serial@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
NXP Linux Team <linux-imx@nxp.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 2/3] serial: imx: set_mctrl(): correctly restore autoRTS state
Date: Tue, 23 Jul 2019 14:30:01 +0300 [thread overview]
Message-ID: <87blxlyona.fsf@osv.gnss.ru> (raw)
In-Reply-To: <20190723094902.r7v5wzu4lkicrs3o@pengutronix.de> ("Uwe \=\?utf-8\?Q\?Kleine-K\=C3\=B6nig\=22's\?\= message of "Tue, 23 Jul 2019 11:49:02 +0200")
Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes:
> On Tue, Jul 23, 2019 at 12:20:38PM +0300, Sergey Organov wrote:
>> Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes:
>>
>> > On Mon, Jul 22, 2019 at 10:22:10PM +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.
>> >>
>> >> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
>
> Oh, you added my Ack for patches 2 and 3, too, even before I looked
> again on those :-|
>
>> >> 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 | 16 ++++++++++++++--
>> >> 1 file changed, 14 insertions(+), 2 deletions(-)
>> >>
>> >> diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
>> >> index 32f36d8..059ba35 100644
>> >> --- a/drivers/tty/serial/imx.c
>> >> +++ b/drivers/tty/serial/imx.c
>> >> @@ -974,10 +974,22 @@ 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 if RTS is lowered and restore autoRTS
>> >> + * setting if RTS is raised.
>> >
>> > "lower" and "raising" are misleading here. I recommend sticking to
>> > "active" and "inactive".
>>
>> This is copy-pasted from the 8250 driver. I'd prefer to leave it as is.
>
> I'd prefer to fix the 8250 accordingly. "raised" is just misleading
> because the handshaking signals are low-active and you always have to
> think if the logical or the physical signal is raising. "active" is
> clear in this regard.
You are free to do it in one bunch for all the drivers it appears in
then. For now I prefer consistency between drivers, even though I do
agree the wording could be improved.
>> >> + */
>> >> ucr2 = imx_uart_readl(sport, UCR2);
>> >> ucr2 &= ~(UCR2_CTS | UCR2_CTSC);
>> >> - if (mctrl & TIOCM_RTS)
>> >> - ucr2 |= UCR2_CTS | UCR2_CTSC;
>> >> + if (mctrl & TIOCM_RTS) {
>> >> + ucr2 |= UCR2_CTS;
>> >> + /*
>> >> + * UCR2_IRTS is unset if and only if the port is
>> >> + * configured for CRTSCTS, so we use inverted UCR2_IRTS
>> >> + * to get the state to restore to.
>> >> + */
>> >> + if (!(ucr2 & UCR2_IRTS))
>> >> + ucr2 |= UCR2_CTSC;
>> >> + }
>> >
>> > If you teach imx_uart_rts_auto about IRTS this function could be reused
>> > here I think.
>>
>> Yeah, but imx_uart_rts_auto_if_crtscts_and_rts_is_active() ? I feel
>> somewhat uncomfortable about that mixing of different purposes.
>>
>> Besides, one of the purposes of these patch series was to get rid of
>> imx_uart_rts_auto() as its name is confusing in the context of existing
>> imx_uart_rts_active() and imx_uart_rts_inactive(), as I already
>> explained before.
>>
>> We can rename the function to avoid confusion, add yet another check to
>> it, and call it from 2 places, but it's still questionable if it's an
>> improvement, and could be done as a follow-up step anyway. It will look
>> something like this then:
>>
>> -- >8 --
>>
>> serial: imx: factor out common code into new imx_uart_set_auto_rts()
>>
>> Modified drivers/tty/serial/imx.c
>> diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
>> index d9a73c7..c8b847e 100644
>> --- a/drivers/tty/serial/imx.c
>> +++ b/drivers/tty/serial/imx.c
>> @@ -954,6 +954,20 @@ static unsigned int imx_uart_get_mctrl(struct uart_port *port)
>> return ret;
>> }
>>
>> +/*
>> + * Compute and set auto RTS in 'ucr2' according to the current state of RTS
>> + * signal and CRTSCTS state of port configuration.
>> + *
>> + * Use inverted UCR2_IRTS to get the state of CRTSCTS, and don't let receiver
>> + * control RTS output if RTS is inactive.
>> + *
>> + */
>> +static void imx_uart_set_auto_rts(u32 *ucr2)
>> +{
>> + if ((*ucr2 & UCR2_CTS) && !(*ucr2 & UCR2_IRTS))
>> + *ucr2 |= UCR2_CTSC;
>> +}
>> +
>
> this looks fine and is what I intended to suggest. The comment isn't
> optimal yet, I'd write something like:
>
> /*
> * Enable hardware control of the RTS output iff handshaking is in use
> * and software requested RTS to be active.
> * "handshaking is in use" can be determined from the IRTS bit that is
> * set when handshaking is not used. The requested state by software
> * is represented in the CTS bit.
> */
I don't like it as this function doesn't enable or disable anything. It
just computes needed state of one bit taking into account two
conditions.
Independent on comment, for more clarity, it could have been:
static void imx_uart_set_auto_rts(u32 *ucr2)
{
if ((*ucr2 & UCR2_CTS) && !(*ucr2 & UCR2_IRTS))
*ucr2 |= UCR2_CTSC;
else
*ucr2 &= ~UCR2_CTSC;
}
to be independent of the current state of UCR2_CTSC.
>
> IMHO go directly to imx_uart_set_auto_rts() before introducing the
> second open coding of its logic.
Actually, it looks clearer the way I've suggested, I think, as I didn't
in fact introduce second open coding of its logic, it's just we later
decided that 2 different logics (restore autoRTS on RTS raise, and set
autoRTS on user request) could be merged into single function.
-- Sergey
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-07-23 11:30 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
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 [this message]
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=87blxlyona.fsf@osv.gnss.ru \
--to=sorganov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--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.