| From 62a9f0a745e7e632b43f672b8f7d0c2cee5f2c2b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 13 Sep 2018 10:21:25 +0200 |
| Subject: serial: samsung: Enable baud clock for UART reset procedure in resume |
| |
| From: Marek Szyprowski <m.szyprowski@samsung.com> |
| |
| [ Upstream commit 1ff3652bc7111df26b5807037f624be294cf69d5 ] |
| |
| Ensure that the baud clock is also enabled for UART register writes in |
| driver resume. On Exynos5433 SoC this is needed to avoid external abort |
| issue. |
| |
| Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> |
| Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/tty/serial/samsung.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c |
| index c6058b52d5d59..2a49b6d876b87 100644 |
| --- a/drivers/tty/serial/samsung.c |
| +++ b/drivers/tty/serial/samsung.c |
| @@ -1944,7 +1944,11 @@ static int s3c24xx_serial_resume(struct device *dev) |
| |
| if (port) { |
| clk_prepare_enable(ourport->clk); |
| + if (!IS_ERR(ourport->baudclk)) |
| + clk_prepare_enable(ourport->baudclk); |
| s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port)); |
| + if (!IS_ERR(ourport->baudclk)) |
| + clk_disable_unprepare(ourport->baudclk); |
| clk_disable_unprepare(ourport->clk); |
| |
| uart_resume_port(&s3c24xx_uart_drv, port); |
| @@ -1967,7 +1971,11 @@ static int s3c24xx_serial_resume_noirq(struct device *dev) |
| if (rx_enabled(port)) |
| uintm &= ~S3C64XX_UINTM_RXD_MSK; |
| clk_prepare_enable(ourport->clk); |
| + if (!IS_ERR(ourport->baudclk)) |
| + clk_prepare_enable(ourport->baudclk); |
| wr_regl(port, S3C64XX_UINTM, uintm); |
| + if (!IS_ERR(ourport->baudclk)) |
| + clk_disable_unprepare(ourport->baudclk); |
| clk_disable_unprepare(ourport->clk); |
| } |
| } |
| -- |
| 2.20.1 |
| |