| From dfcab6ba573445c703235ab6c83758eec12d7f28 Mon Sep 17 00:00:00 2001 |
| From: Chen Hu <hu1.chen@intel.com> |
| Date: Fri, 27 Jul 2018 18:32:41 +0800 |
| Subject: serial: 8250_dw: always set baud rate in dw8250_set_termios |
| |
| From: Chen Hu <hu1.chen@intel.com> |
| |
| commit dfcab6ba573445c703235ab6c83758eec12d7f28 upstream. |
| |
| dw8250_set_termios() doesn't set baud rate if the arg "old ktermios" is |
| NULL. This happens during resume. |
| Call Trace: |
| ... |
| [ 54.928108] dw8250_set_termios+0x162/0x170 |
| [ 54.928114] serial8250_set_termios+0x17/0x20 |
| [ 54.928117] uart_change_speed+0x64/0x160 |
| [ 54.928119] uart_resume_port |
| ... |
| |
| So the baud rate is not restored after S3 and breaks the apps who use |
| UART, for example, console and bluetooth etc. |
| |
| We address this issue by setting the baud rate irrespective of arg |
| "old", just like the drivers for other 8250 IPs. This is tested with |
| Intel Broxton platform. |
| |
| Signed-off-by: Chen Hu <hu1.chen@intel.com> |
| Fixes: 4e26b134bd17 ("serial: 8250_dw: clock rate handling for all ACPI platforms") |
| Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com> |
| Cc: stable <stable@vger.kernel.org> |
| Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/tty/serial/8250/8250_dw.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/tty/serial/8250/8250_dw.c |
| +++ b/drivers/tty/serial/8250/8250_dw.c |
| @@ -235,7 +235,7 @@ static void dw8250_set_termios(struct ua |
| unsigned int rate; |
| int ret; |
| |
| - if (IS_ERR(d->clk) || !old) |
| + if (IS_ERR(d->clk)) |
| goto out; |
| |
| clk_disable_unprepare(d->clk); |