From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Heiko Stuebner <heiko@sntech.de>
Cc: gregkh@linuxfoundation.org, jslaby@suse.com,
matwey.kornilov@gmail.com, giulio.benetti@micronovasrl.com,
lukas@wunner.de, linux-serial@vger.kernel.org,
linux-kernel@vger.kernel.org,
christoph.muellner@theobroma-systems.com,
Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
Subject: Re: [PATCH v3 4/5] serial: 8250: Handle implementations not having TEMT interrupt using em485
Date: Mon, 18 May 2020 18:19:28 +0300 [thread overview]
Message-ID: <20200518151928.GH1634618@smile.fi.intel.com> (raw)
In-Reply-To: <20200517215610.2131618-5-heiko@sntech.de>
On Sun, May 17, 2020 at 11:56:09PM +0200, Heiko Stuebner wrote:
> From: Giulio Benetti <giulio.benetti@micronovasrl.com>
>
> Some 8250 ports have a TEMT interrupt but it's not a part of the 8250
> standard, instead only available on some implementations.
>
> The current em485 implementation does not work on ports without it.
> The only chance to make it work is to loop-read on LSR register.
>
> So add UART_CAP_TEMT to mark 8250 uarts having this interrupt,
> update all current em485 users with that capability and add
> a loop-reading during __stop_tx_rs485() on uarts not having it.
>
> As __stop_tx_rs485() can also be called from a hard-irq context the
> loop-reading is split. If the fifo clears in under 100us in
> __stop_tx_rs485() itself just the regular stop calls get executed.
> If it takes longer, re-use the existing stop-timer infrastructure
> but with only a 10us timer to again poll the LSR registers.
>
> Signed-off-by: Giulio Benetti <giulio.benetti@micronovasrl.com>
> [moved to use added UART_CAP_TEMT, use readx_poll_timeout]
I can't parse first part...
Also, shouldn't it be rather like
[heiko: ...]
?
...
> +static inline int __get_lsr(struct uart_8250_port *p)
> +{
> + return serial_in(p, UART_LSR);
> +}
> +
> +static inline int __wait_for_empty(struct uart_8250_port *p, u64 timeout_us)
> +{
> + int lsr;
> +
> + return readx_poll_timeout(__get_lsr, p, lsr,
> + (lsr & BOTH_EMPTY) == BOTH_EMPTY,
> + 0, timeout_us);
> +}
...
> + int ret = __wait_for_empty(p, 100);
Do you expect something different than 100? If no, perhaps for now just put it
inside the function as a constant?
> + if (ret < 0) {
> + restart = HRTIMER_RESTART;
> + goto out;
> + }
...
> + } else if (!(p->capabilities & UART_CAP_TEMT) &&
> + __wait_for_empty(p, 100)) {
I would leave it on one line even if you leave 100 as a parameter, but it's up to you.
...
> + if (p->capabilities & UART_CAP_TEMT) {
> + if ((lsr & BOTH_EMPTY) != BOTH_EMPTY)
> + return;
> + }
if (a) {
if (b) {
...
}
}
is equivalent to
if (a && b) {
...
}
But it's up to you which one to choose.
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2020-05-18 15:19 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-17 21:56 [PATCH v3 0/5] serial: 8250: Add rs485 emulation to 8250_dw Heiko Stuebner
2020-05-17 21:56 ` [PATCH v3 1/5] serial: 8520_port: Fix function param documentation Heiko Stuebner
2020-05-18 15:09 ` Andy Shevchenko
2020-05-17 21:56 ` [PATCH v3 2/5] dt-bindings: serial: Add binding for rs485 receiver enable GPIO Heiko Stuebner
2020-05-17 21:56 ` [PATCH v3 3/5] serial: 8250: Support separate rs485 rx-enable GPIO Heiko Stuebner
2020-05-18 4:50 ` Lukas Wunner
2020-05-18 8:04 ` Heiko Stübner
2020-05-18 9:19 ` Lukas Wunner
2020-05-18 15:12 ` Andy Shevchenko
2020-05-18 15:22 ` Lukas Wunner
2020-05-18 15:24 ` Lukas Wunner
2020-05-18 16:13 ` Maarten Brock
2020-05-18 16:35 ` Andy Shevchenko
2020-05-18 17:05 ` Maarten Brock
2020-05-18 17:16 ` Andy Shevchenko
2020-05-17 21:56 ` [PATCH v3 4/5] serial: 8250: Handle implementations not having TEMT interrupt using em485 Heiko Stuebner
2020-05-18 15:19 ` Andy Shevchenko [this message]
2020-05-17 21:56 ` [PATCH v3 5/5] serial: 8250_dw: add em485 support Heiko Stuebner
2020-05-18 15:21 ` Andy Shevchenko
2021-02-02 0:31 ` Giulio Benetti
2021-02-02 11:22 ` Andy Shevchenko
2021-02-05 17:46 ` Giulio Benetti
2021-02-05 19:29 ` Andy Shevchenko
2022-09-22 9:56 ` [PATCH v3 0/5] serial: 8250: Add rs485 emulation to 8250_dw 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=20200518151928.GH1634618@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=christoph.muellner@theobroma-systems.com \
--cc=giulio.benetti@micronovasrl.com \
--cc=gregkh@linuxfoundation.org \
--cc=heiko.stuebner@theobroma-systems.com \
--cc=heiko@sntech.de \
--cc=jslaby@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=matwey.kornilov@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 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.