summaryrefslogtreecommitdiffstats
path: root/sys/dev/uart/uart_dev_pl011.c
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-05-23 19:27:04 +0000
committerian <ian@FreeBSD.org>2015-05-23 19:27:04 +0000
commit5ba1e43ae8e1813da545e99ca49d014da8258d59 (patch)
treeef692c50fa13770b991f4c1a67202033af197850 /sys/dev/uart/uart_dev_pl011.c
parent18d949556563b32c5c9cf8428aacc920b4acfc1c (diff)
downloadFreeBSD-src-5ba1e43ae8e1813da545e99ca49d014da8258d59.zip
FreeBSD-src-5ba1e43ae8e1813da545e99ca49d014da8258d59.tar.gz
MFC r272399, r272602, r274451, r274452:
Add uart driver for Qualcomm MSM 7000/8000 series chips. It is working on IFC6410 board which has Qualcomm Snapdragon SoC. Use documented compat string for msm uart. Make PL011 UART to wait on putc only when TX FIFO is full Make uart_bus_fdt a decendant of ofwbus
Diffstat (limited to 'sys/dev/uart/uart_dev_pl011.c')
-rw-r--r--sys/dev/uart/uart_dev_pl011.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/dev/uart/uart_dev_pl011.c b/sys/dev/uart/uart_dev_pl011.c
index 3253cd1..2e5ac8c 100644
--- a/sys/dev/uart/uart_dev_pl011.c
+++ b/sys/dev/uart/uart_dev_pl011.c
@@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
#define DR_OE (1 << 11) /* Overrun error */
#define UART_FR 0x06 /* Flag register */
+#define FR_TXFF (1 << 5) /* Transmit FIFO/reg full */
#define FR_RXFF (1 << 6) /* Receive FIFO/reg full */
#define FR_TXFE (1 << 7) /* Transmit FIFO/reg empty */
@@ -194,7 +195,8 @@ static void
uart_pl011_putc(struct uart_bas *bas, int c)
{
- while (!(__uart_getreg(bas, UART_FR) & FR_TXFE))
+ /* Wait when TX FIFO full. Push character otherwise. */
+ while (__uart_getreg(bas, UART_FR) & FR_TXFF)
;
__uart_setreg(bas, UART_DR, c & 0xff);
}
OpenPOWER on IntegriCloud