On Sun, Mar 05, 2017 at 12:33:57PM +0100, Mark Kettenis wrote:
> Diff below makes the console on the odroid-xu4 actually work. I don't
> completely understand the current code. It doesn't check whether a
> character can be written before doing so. Instead it tries to make
> sure the transmission of the character completes. But that seems to
> fail, possibly because the code tries to cater for both FIFO and
> non-FIFO mode. Since u-boot puts the chip into FIFO mode, I think we
> can simply check whether there is room in the FIFO before we transmit
> and be done with it.
>
> ok?
I don't think anyone ever used that code. Specifically because my
Chromebook did not have a UART (that I found). Reads fine to me.
>
>
> Index: exuart.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/armv7/exynos/exuart.c,v
> retrieving revision 1.7
> diff -u -p -r1.7 exuart.c
> --- exuart.c 21 Aug 2016 06:36:23 -0000 1.7
> +++ exuart.c 5 Mar 2017 11:27:25 -0000
> @@ -883,12 +883,10 @@ exuartcnputc(dev_t dev, int c)
> {
> int s;
> s = splhigh();
> - bus_space_write_1(exuartconsiot, exuartconsioh, EXUART_UTXH,
> (uint8_t)c);
> - while((bus_space_read_2(exuartconsiot, exuartconsioh, EXUART_UTRSTAT) &
> - EXUART_UTRSTAT_TXBEMPTY) != 0 &&
> - (bus_space_read_2(exuartconsiot, exuartconsioh, EXUART_UFSTAT) &
> - (EXUART_UFSTAT_TX_FIFO_CNT_MASK|EXUART_UFSTAT_TX_FIFO_FULL)) != 0)
> + while (bus_space_read_4(exuartconsiot, exuartconsioh, EXUART_UFSTAT) &
> + EXUART_UFSTAT_TX_FIFO_FULL)
> ;
> + bus_space_write_1(exuartconsiot, exuartconsioh, EXUART_UTXH, c);
> splx(s);
> }
>
>