remarkable-linux/drivers/tty/serial/8250
James Hogan b15bfbe642 serial: 8250_dw: Fix breakage when HAVE_CLK=n
Commit 6a171b2993 ("serial: 8250_dw: Allow hardware flow control to be
used") recently broke the 8250_dw driver on platforms which don't select
HAVE_CLK, as dw8250_set_termios() gets confused by the behaviour of the
fallback HAVE_CLK=n clock API in linux/clk.h which pretends everything
is fine but returns (valid) NULL clocks and 0 HZ clock rates.

That 0 rate is written into the uartclk resulting in a crash at boot,
e.g. on Cavium Octeon III based UTM-8 we get something like this:

1180000000800.serial: ttyS0 at MMIO 0x1180000000800 (irq = 41, base_baud = 25000000) is a OCTEON
------------[ cut here ]------------
WARNING: CPU: 2 PID: 1 at drivers/tty/serial/serial_core.c:441 uart_get_baud_rate+0xfc/0x1f0
...
Call Trace:
...
[<ffffffff8149c2e4>] uart_get_baud_rate+0xfc/0x1f0
[<ffffffff814a5098>] serial8250_do_set_termios+0xb0/0x440
[<ffffffff8149c710>] uart_set_options+0xe8/0x190
[<ffffffff814a6cdc>] serial8250_console_setup+0x84/0x158
[<ffffffff814a11ec>] univ8250_console_setup+0x54/0x70
[<ffffffff811901a0>] register_console+0x1c8/0x418
[<ffffffff8149f004>] uart_add_one_port+0x434/0x4b0
[<ffffffff814a1af8>] serial8250_register_8250_port+0x2d8/0x440
[<ffffffff814aa620>] dw8250_probe+0x388/0x5e8
...

The clock API is defined such that NULL is a valid clock handle so it
wouldn't be right to check explicitly for NULL. Instead treat a
clk_round_rate() return value of 0 as an error which prevents uartclk
being overwritten.

Fixes: 6a171b2993 ("serial: 8250_dw: Allow hardware flow control to be used")
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: David Daney <david.daney@cavium.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: linux-serial@vger.kernel.org
Cc: linux-clk@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: bcm-kernel-feedback-list@broadcom.com
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Jason Uy <jason.uy@broadcom.com>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-03-14 10:48:11 +08:00
..
8250.h serial: 8250: Add IrDA to UART capabilities 2016-11-16 10:59:38 +01:00
8250_accent.c
8250_acorn.c
8250_bcm2835aux.c
8250_boca.c
8250_core.c Revert "tty: serial: 8250: add CON_CONSDEV to flags" 2017-01-11 08:35:17 +01:00
8250_dma.c serial: 8250_dma: power off device after TX is done 2016-11-16 10:57:26 +01:00
8250_dw.c serial: 8250_dw: Fix breakage when HAVE_CLK=n 2017-03-14 10:48:11 +08:00
8250_early.c serial: 8250_early: Add earlycon support for Synopsys DesignWare ABP UART 2016-06-25 09:12:55 -07:00
8250_em.c
8250_exar.c serial: exar: Enable MSI support 2017-02-10 15:13:26 +01:00
8250_exar_st16c554.c
8250_fintek.c serial: 8250_fintek: Add F81865 Support 2016-10-27 16:28:17 +02:00
8250_fourport.c
8250_fsl.c
8250_gsc.c tty: serial: 8250: 8250_gsc:- Handle return NULL error from ioremap_nocache 2017-01-19 14:20:23 +01:00
8250_hp300.c serial: hp300: mask the warning for people just doing build coverage 2017-01-25 11:08:30 +01:00
8250_hub6.c
8250_ingenic.c serial: 8250_ingenic: drop #if conditional surrounding earlycon code 2016-06-25 14:31:04 -07:00
8250_lpc18xx.c
8250_lpss.c serial: 8250_lpss: avoid potential kernel crash when remove 2017-01-12 11:51:25 +01:00
8250_mid.c serial: 8250_mid: set PCI master only for DMA capable device 2017-01-19 14:20:23 +01:00
8250_moxa.c serial: 8250: moxa: Store num_ports in brd 2017-01-12 11:51:25 +01:00
8250_mtk.c serial: 8250_mtk: support big baud rate. 2016-08-31 16:01:26 +02:00
8250_of.c 8250: of: remove remnants of generic of_serial driver 2017-01-27 09:23:36 +01:00
8250_omap.c serial: 8250_omap: Fix probe and remove for PM runtime 2017-01-25 11:08:30 +01:00
8250_pci.c serial: pci: Remove unused pci_boards entries 2017-02-10 15:12:39 +01:00
8250_pnp.c
8250_port.c serial: exar: Move register defines from uapi header to consumer site 2017-02-10 15:13:26 +01:00
8250_pxa.c serial: pxa2xx: mark PM functions as __maybe_unused 2016-11-10 14:50:46 +01:00
8250_uniphier.c serial: 8250_uniphier: avoid locking for FCR register write 2016-11-10 14:30:09 +01:00
Kconfig serial: 8250_pci: remove exar code 2017-02-03 10:12:16 +01:00
Makefile serial: exar: split out the exar code from 8250_pci 2017-02-03 10:12:16 +01:00
serial_cs.c