Linux Serial subsystem development
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Lukas Wunner <lukas@wunner.de>
Cc: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>,
	Roosen Henri <Henri.Roosen@ginzinger.com>,
	linux-serial@vger.kernel.org,
	Ilpo Jarvinen <ilpo.jarvinen@linux.intel.com>,
	Jiri Slaby <jirislaby@kernel.org>,
	Lino Sanfilippo <LinoSanfilippo@gmx.de>,
	David Laight <David.Laight@aculab.com>,
	Maarten Brock <m.brock@vanmierlo.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	Su Bao Cheng <baocheng.su@siemens.com>,
	Chao Zeng <chao.zeng@siemens.com>,
	Peter Hung <hpeter+linux_kernel@gmail.com>,
	Daniel Golle <daniel@makrotopia.org>,
	"Codrin.Ciubotariu@microchip.com"
	<Codrin.Ciubotariu@microchip.com>,
	Sherry Sun <sherry.sun@nxp.com>,
	Serge Semin <Sergey.Semin@baikalelectronics.ru>,
	Ricardo Ribalda <ribalda@kernel.org>,
	Dario Binacchi <dariobin@libero.it>,
	Bich Hemon <bich.hemon@st.com>, Marek Vasut <marex@denx.de>,
	Vicente Bergas <vicencb@gmail.com>
Subject: Re: [PATCH v2] serial: Deassert Transmit Enable on probe in driver-specific way
Date: Thu, 22 Sep 2022 16:43:51 +0200	[thread overview]
Message-ID: <Yyx0p4d5vcjt2XNB@kroah.com> (raw)
In-Reply-To: <e688f63bc28827b0e8c9d8e2319e688aee412d24.1663733425.git.lukas@wunner.de>

On Wed, Sep 21, 2022 at 06:39:33AM +0200, Lukas Wunner wrote:
> When a UART port is newly registered, uart_configure_port() seeks to
> deassert RS485 Transmit Enable by setting the RTS bit in port->mctrl.
> However a number of UART drivers interpret a set RTS bit as *assertion*
> instead of deassertion:  Affected drivers include those using
> serial8250_em485_config() (except 8250_bcm2835aux.c) and some using
> mctrl_gpio (e.g. imx.c).
> 
> Since the interpretation of the RTS bit is driver-specific, it is not
> suitable as a means to centrally deassert Transmit Enable in the serial
> core.  Instead, the serial core must call on drivers to deassert it in
> their driver-specific way.  One way to achieve that is to call
> ->rs485_config().  It implicitly deasserts Transmit Enable.
> 
> So amend uart_configure_port() and uart_resume_port() to invoke
> uart_rs485_config().  That allows removing calls to uart_rs485_config()
> from drivers' ->probe() hooks and declaring the function static.
> 
> Skip any invocation of ->set_mctrl() if RS485 is enabled.  RS485 has no
> hardware flow control, so the modem control lines are irrelevant and
> need not be touched.  When leaving RS485 mode, reset the modem control
> lines to the state stored in port->mctrl.  That way, UARTs which are
> muxed between RS485 and RS232 transceivers drive the lines correctly
> when switched to RS232.  (serial8250_do_startup() historically raises
> the OUT1 modem signal because otherwise interrupts are not signaled on
> ancient PC UARTs, but I believe that no longer applies to modern,
> RS485-capable UARTs and is thus safe to be skipped.)
> 
> imx.c modifies port->mctrl whenever Transmit Enable is asserted and
> deasserted.  Stop it from doing that so port->mctrl reflects the RS232
> line state.
> 
> 8250_omap.c deasserts Transmit Enable on ->runtime_resume() by calling
> ->set_mctrl().  Because that is now a no-op in RS485 mode, amend the
> function to call serial8250_em485_stop_tx().
> 
> fsl_lpuart.c retrieves and applies the RS485 device tree properties
> after registering the UART port.  Because applying now happens on
> registration in uart_configure_port(), move retrieval of the properties
> ahead of uart_add_one_port().
> 
> Fixes: d3b3404df318 ("serial: Fix incorrect rs485 polarity on uart open")
> Reported-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
> Tested-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
> Link: https://lore.kernel.org/all/20220329085050.311408-1-matthias.schiffer@ew.tq-group.com/
> Reported-by: Roosen Henri <Henri.Roosen@ginzinger.com>
> Link: https://lore.kernel.org/all/8f538a8903795f22f9acc94a9a31b03c9c4ccacb.camel@ginzinger.com/
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Cc: stable@vger.kernel.org # v4.14+
> ---
>  v1 -> v2:
>  Deassert RTS in serial8250_em485_init() only if no transmission is
>  currently ongoing (Ilpo)
> 
>  Based on v6.0-rc3 + this dependency:
>  https://lore.kernel.org/linux-serial/72fb646c1b0b11c989850c55f52f9ff343d1b2fa.1662884345.git.lukas@wunner.de/

This message never made it to lore.kernel.org, so I can't seem to apply
it using `b4`.

Can you resend it so that it does make it to the public archives?

thanks,

greg k-h

       reply	other threads:[~2022-09-22 14:43 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <e688f63bc28827b0e8c9d8e2319e688aee412d24.1663733425.git.lukas@wunner.de>
2022-09-22 14:43 ` Greg Kroah-Hartman [this message]
2022-09-22 15:43   ` [PATCH v2] serial: Deassert Transmit Enable on probe in driver-specific way Lukas Wunner
2022-09-22 16:06     ` Greg Kroah-Hartman
2022-09-22 16:30       ` Lukas Wunner
2022-10-07 11:34         ` Matthias Schiffer
2022-10-07 12:02           ` Lukas Wunner

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=Yyx0p4d5vcjt2XNB@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=Codrin.Ciubotariu@microchip.com \
    --cc=David.Laight@aculab.com \
    --cc=Henri.Roosen@ginzinger.com \
    --cc=LinoSanfilippo@gmx.de \
    --cc=Sergey.Semin@baikalelectronics.ru \
    --cc=baocheng.su@siemens.com \
    --cc=bich.hemon@st.com \
    --cc=chao.zeng@siemens.com \
    --cc=daniel@makrotopia.org \
    --cc=dariobin@libero.it \
    --cc=hpeter+linux_kernel@gmail.com \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=jan.kiszka@siemens.com \
    --cc=jirislaby@kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=m.brock@vanmierlo.com \
    --cc=marex@denx.de \
    --cc=matthias.schiffer@ew.tq-group.com \
    --cc=ribalda@kernel.org \
    --cc=sherry.sun@nxp.com \
    --cc=vicencb@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox