Linux-Serial Archive on
 help / color / Atom feed
From: Serge Semin <>
To: Thomas Bogendoerfer <>,
	Greg Kroah-Hartman <>,
	Jiri Slaby <>
Cc: Serge Semin <>,
	Serge Semin <>,
	Alexey Malahov <>,
	Maxim Kaurkin <>,
	Pavel Parkhomenko <>,
	Alexey Kolotnikov <>,
	Ramil Zaripov <>,
	Ekaterina Skachko <>,
	Vadim Vlasov <>,
	Arnd Bergmann <>,
	Andy Shevchenko <>,
	Maxime Ripard <>, Will Deacon <>,
	Russell King <>,
	<>, <>
Subject: [PATCH RESEND v6 0/3] serial: 8250_dw: Fix ref clock usage
Date: Thu, 18 Jun 2020 01:48:10 +0300
Message-ID: <> (raw)

Greg, Jiri. We've missed the last merge window. It would be pity to miss
the next one. Please review/merge in the series.

Regarding the patchset. It might be dangerous if an UART port reference
clock rate is suddenly changed. In particular the 8250 port drivers
(and AFAICS most of the tty drivers using common clock framework clocks)
rely either on the exclusive reference clock utilization or on the ref
clock rate being always constant. Needless to say that it turns out not
true and if some other service suddenly changes the clock rate behind an
UART port driver back no good can happen. So the port might not only end
up with an invalid uartclk value saved, but may also experience a
distorted output/input data since such action will effectively update the
programmed baud-clock. We discovered such problem on Baikal-T1 SoC where
two DW 8250 ports have got a shared reference clock. Allwinner SoC is
equipped with an UART, which clock is derived from the CPU PLL clock
source, so the CPU frequency change might be propagated down up to the
serial port reference clock. This patchset provides a way to fix the
problem to the 8250 serial port controllers and mostly fixes it for the
DW 8250-compatible UART. I say mostly because due to not having a facility
to pause/stop and resume/restart on-going transfers we implemented the
UART clock rate update procedure executed post factum of the actual
reference clock rate change.

In addition the patchset includes a small optimization patch. It
simplifies the DW APB UART ref clock rate setting procedure a bit.

This patchset is rebased and tested on the mainline Linux kernel 5.7-rc4:
base-commit: 0e698dfa2822 ("Linux 5.7-rc4")
tag: v5.7-rc4

Changelog v3:
- Refactor the original patch to adjust the UART port divisor instead of
  requesting an exclusive ref clock utilization.

Changelog v4:
- Discard commit b426bf0fb085 ("serial: 8250: Fix max baud limit in generic
  8250 port") since Greg has already merged it into the tty-next branch.
- Use EXPORT_SYMBOL_GPL() for the serial8250_update_uartclk() method.

Changelog v5:
- Refactor dw8250_clk_work_cb() function cheking the clk_get_rate()
  return value for being erroneous and exit if it is.
- Don't update p->uartclk in the port startup. It will be updated later in
  the same procedure at the set_termios() function being invoked by the
  serial_core anyway.

Changelog v6:
- Resend

Signed-off-by: Serge Semin <>
Cc: Alexey Malahov <>
Cc: Maxim Kaurkin <>
Cc: Pavel Parkhomenko <>
Cc: Alexey Kolotnikov <>
Cc: Ramil Zaripov <>
Cc: Ekaterina Skachko <>
Cc: Vadim Vlasov <>
Cc: Alexey Kolotnikov <>
Cc: Arnd Bergmann <>
Cc: Andy Shevchenko <>
Cc: Maxime Ripard <>
Cc: Will Deacon <>
Cc: Russell King <>

Serge Semin (3):
  serial: 8250: Add 8250 port clock update method
  serial: 8250_dw: Simplify the ref clock rate setting procedure
  serial: 8250_dw: Fix common clocks usage race condition

 drivers/tty/serial/8250/8250_dw.c   | 116 +++++++++++++++++++++++++---
 drivers/tty/serial/8250/8250_port.c |  38 +++++++++
 include/linux/serial_8250.h         |   2 +
 3 files changed, 144 insertions(+), 12 deletions(-)


             reply index

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-17 22:48 Serge Semin [this message]
2020-06-17 22:48 ` [PATCH v6 1/3] serial: 8250: Add 8250 port clock update method Serge Semin
2020-06-17 22:48 ` [PATCH v6 2/3] serial: 8250_dw: Simplify the ref clock rate setting procedure Serge Semin
2020-06-17 22:48 ` [PATCH v6 3/3] serial: 8250_dw: Fix common clocks usage race condition Serge Semin
2020-06-18  8:29   ` Andy Shevchenko
2020-06-19 17:47     ` Serge Semin
2020-06-18  8:17 ` [PATCH RESEND v6 0/3] serial: 8250_dw: Fix ref clock usage Andy Shevchenko
2020-06-18  8:31   ` Andy Shevchenko
2020-06-19 17:21     ` Serge Semin
2020-06-19 17:16   ` Serge Semin

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:

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

  git send-email \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-Serial Archive on

Archives are clonable:
	git clone --mirror linux-serial/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-serial linux-serial/ \
	public-inbox-index linux-serial

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone