]> Zhao Yanbai Git Server - minix.git/commitdiff
Kernel: busy wait until serial out has finished
authorThomas Veerman <thomas@minix3.org>
Wed, 17 Oct 2012 14:57:08 +0000 (14:57 +0000)
committerThomas Veerman <thomas@minix3.org>
Tue, 30 Oct 2012 11:32:04 +0000 (11:32 +0000)
kernel/arch/arm/omap_serial.c
kernel/arch/arm/omap_serial.h

index 30e744e995372c95a770d0f6f30ec584f55c843a..5a598c796269b79c820e9039db19bf28aa67f909 100644 (file)
@@ -9,9 +9,14 @@ void omap3_ser_putc(char c)
 
     /* Wait until FIFO's empty */
     for (i = 0; i < 100000; i++)
-       if (mmio_read(OMAP3_UART3_LSR) & OMAP3_LSR_TX_FIFO_E)
+       if (mmio_read(OMAP3_UART3_LSR) & OMAP3_LSR_THRE)
            break;
 
     /* Write character */
     mmio_write(OMAP3_UART3_THR, c);
+
+    /* And wait again until FIFO's empty to prevent TTY from overwriting */
+    for (i = 0; i < 100000; i++)
+       if (mmio_read(OMAP3_UART3_LSR) & (OMAP3_LSR_THRE | OMAP3_LSR_TEMT))
+           break;
 }
index 278d028834be4bb9b5deaba2fe6b72ba9907f168..f3b0626ef59645c2cc3729e182ec55567a7ca278 100644 (file)
@@ -12,7 +12,8 @@
 #define OMAP3_SSR 0x044 /* Supplementary status register */
 
 /* Line status register fields */
-#define OMAP3_LSR_TX_FIFO_E    (1 << 5) /* Transmit FIFO empty */
+#define OMAP3_LSR_TEMT    0x40 /* Transmitter empty */
+#define OMAP3_LSR_THRE    0x20 /* Transmit-hold-register empty */
 
 /* Supplementary status register fields */
 #define OMAP3_SSR_TX_FIFO_FULL (1 << 0) /* Transmit FIFO full */