Message ID | 008c01d27c75$8cd73e60$a685bb20$@samsung.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Hello Youngmin, I was wondering if this fixes an actual issue. The changes look sane, but shouldn't be current code trigger some imprecise external abort on system resume then? I'm asking because on my Exynos4412 board nothing like that happens on system resume. And if I read the code correctly, s3c24xx_serial_has_interrupt_mask() returns 1 in my case. With best wishes, Tobias 남영민 wrote: > Ensure that the uart clock is enabled prior to writing to the > interrupt mask register in s3c24xx_serial_resume_noirq function. > Without enabing the uart clock, the uart register cannot be accessed. > > Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com> > --- > drivers/tty/serial/samsung.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c > index f44615f..06488fd 100644 > --- a/drivers/tty/serial/samsung.c > +++ b/drivers/tty/serial/samsung.c > @@ -1921,6 +1921,7 @@ static int s3c24xx_serial_resume(struct device *dev) > static int s3c24xx_serial_resume_noirq(struct device *dev) > { > struct uart_port *port = s3c24xx_dev_to_port(dev); > + struct s3c24xx_uart_port *ourport = to_ourport(port); > > if (port) { > /* restore IRQ mask */ > @@ -1930,7 +1931,9 @@ static int s3c24xx_serial_resume_noirq(struct device *dev) > uintm &= ~S3C64XX_UINTM_TXD_MSK; > if (rx_enabled(port)) > uintm &= ~S3C64XX_UINTM_RXD_MSK; > + clk_prepare_enable(ourport->clk); > wr_regl(port, S3C64XX_UINTM, uintm); > + clk_disable_unprepare(ourport->clk); > } > } > > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index f44615f..06488fd 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c @@ -1921,6 +1921,7 @@ static int s3c24xx_serial_resume(struct device *dev) static int s3c24xx_serial_resume_noirq(struct device *dev) { struct uart_port *port = s3c24xx_dev_to_port(dev); + struct s3c24xx_uart_port *ourport = to_ourport(port); if (port) { /* restore IRQ mask */ @@ -1930,7 +1931,9 @@ static int s3c24xx_serial_resume_noirq(struct device *dev) uintm &= ~S3C64XX_UINTM_TXD_MSK; if (rx_enabled(port)) uintm &= ~S3C64XX_UINTM_RXD_MSK; + clk_prepare_enable(ourport->clk); wr_regl(port, S3C64XX_UINTM, uintm); + clk_disable_unprepare(ourport->clk); } }
Ensure that the uart clock is enabled prior to writing to the interrupt mask register in s3c24xx_serial_resume_noirq function. Without enabing the uart clock, the uart register cannot be accessed. Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com> --- drivers/tty/serial/samsung.c | 3 +++ 1 file changed, 3 insertions(+)