public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] imx: serial: Wait for ongoing transmission to finish before serial reset
@ 2017-10-03  9:16 Lukasz Majewski
  2017-10-03  9:30 ` Stefano Babic
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Lukasz Majewski @ 2017-10-03  9:16 UTC (permalink / raw)
  To: u-boot

It may happen that the MXC serial IP block is performing some ongoing
transmission (started at e.g. board_init()) when the "initr_serial" is
called.

As a result the serial port IP block is reset, so transmitted data is
corrupted:

I2C:   ready
DRAM:  1 GiB
jSS('HH��SL_SDHC: 04 rev 0x0

This patch prevents from this situation, by waiting for transmission
complete bit set (UART Status Register 2 (UARTx_USR2), bit TXDC):

I2C:   ready
DRAM:  1 GiB
ID:    unit type 0x4 rev 0x0

Signed-off-by: Lukasz Majewski <lukma@denx.de>
---

 drivers/serial/serial_mxc.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/serial/serial_mxc.c b/drivers/serial/serial_mxc.c
index cce80a8..ef4eb12 100644
--- a/drivers/serial/serial_mxc.c
+++ b/drivers/serial/serial_mxc.c
@@ -141,6 +141,13 @@ struct mxc_uart {
 
 static void _mxc_serial_init(struct mxc_uart *base)
 {
+	/*
+	 * Wait for any ongoing transmission to finish - for example
+	 * from pre-relocation enabled UART
+	 */
+	while (!(readl(&base->sr2) & USR2_TXDC))
+		;
+
 	writel(0, &base->cr1);
 	writel(0, &base->cr2);
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-10-22 14:33 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-03  9:16 [U-Boot] [PATCH] imx: serial: Wait for ongoing transmission to finish before serial reset Lukasz Majewski
2017-10-03  9:30 ` Stefano Babic
2017-10-04  7:05 ` Lothar Waßmann
2017-10-04  8:21   ` Łukasz Majewski
2017-10-09  4:48 ` Simon Glass
2017-10-09 10:46   ` Łukasz Majewski
2017-10-22 14:33     ` Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox