[U-Boot] [PATCH] Revert "serial: ns16550: fix debug uart putc called before init"

This reverts commit 6f57c34473d37b8da5e6a3764d0d377d748aeef1 since it does not seem to work at least on rk3399.
The Rockchip Technical Reference Manual (TRM) for the rk3399 says the baud rate prescaler register is readable only when USR[0] is zero. Since this bit is defined as "reserved" in the socfpga cylcone5 TRM, let's rather drop this than making the ns16550 debug uart more platform specific.
Reported-by: Roosen Henri Henri.Roosen@ginzinger.com Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com ---
drivers/serial/ns16550.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index f21c240e64..25b9d17243 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -272,26 +272,12 @@ static inline void _debug_uart_init(void) serial_dout(&com_port->lcr, UART_LCRVAL); }
-static inline int NS16550_read_baud_divisor(struct NS16550 *com_port) -{ - int ret; - - serial_dout(&com_port->lcr, UART_LCR_BKSE | UART_LCRVAL); - ret = serial_din(&com_port->dll) & 0xff; - ret |= (serial_din(&com_port->dlm) & 0xff) << 8; - serial_dout(&com_port->lcr, UART_LCRVAL); - - return ret; -} - static inline void _debug_uart_putc(int ch) { struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE;
- while (!(serial_din(&com_port->lsr) & UART_LSR_THRE)) { - if (!NS16550_read_baud_divisor(com_port)) - return; - } + while (!(serial_din(&com_port->lsr) & UART_LSR_THRE)) + ; serial_dout(&com_port->thr, ch); }

On 03.12.2018, at 21:55, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
This reverts commit 6f57c34473d37b8da5e6a3764d0d377d748aeef1 since it does not seem to work at least on rk3399.
The Rockchip Technical Reference Manual (TRM) for the rk3399 says the baud rate prescaler register is readable only when USR[0] is zero. Since this bit is defined as "reserved" in the socfpga cylcone5 TRM, let's rather drop this than making the ns16550 debug uart more platform specific.
Reported-by: Roosen Henri Henri.Roosen@ginzinger.com Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
Reviewed-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com

On Mon, Dec 03, 2018 at 09:57:06PM +0100, Philipp Tomsich wrote:
On 03.12.2018, at 21:55, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
This reverts commit 6f57c34473d37b8da5e6a3764d0d377d748aeef1 since it does not seem to work at least on rk3399.
The Rockchip Technical Reference Manual (TRM) for the rk3399 says the baud rate prescaler register is readable only when USR[0] is zero. Since this bit is defined as "reserved" in the socfpga cylcone5 TRM, let's rather drop this than making the ns16550 debug uart more platform specific.
Reported-by: Roosen Henri Henri.Roosen@ginzinger.com Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
Reviewed-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
Thanks, I will apply this before release.

Hi Simon,
On 12/04/2018 04:55 AM, Simon Goldschmidt wrote:
This reverts commit 6f57c34473d37b8da5e6a3764d0d377d748aeef1 since it does not seem to work at least on rk3399.
The Rockchip Technical Reference Manual (TRM) for the rk3399 says the baud rate prescaler register is readable only when USR[0] is zero. Since this bit is defined as "reserved" in the socfpga cylcone5 TRM, let's rather drop this than making the ns16550 debug uart more platform specific.
Reported-by: Roosen Henri Henri.Roosen@ginzinger.com Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
drivers/serial/ns16550.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index f21c240e64..25b9d17243 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -272,26 +272,12 @@ static inline void _debug_uart_init(void) serial_dout(&com_port->lcr, UART_LCRVAL); }
-static inline int NS16550_read_baud_divisor(struct NS16550 *com_port) -{
- int ret;
- serial_dout(&com_port->lcr, UART_LCR_BKSE | UART_LCRVAL);
- ret = serial_din(&com_port->dll) & 0xff;
- ret |= (serial_din(&com_port->dlm) & 0xff) << 8;
- serial_dout(&com_port->lcr, UART_LCRVAL);
- return ret;
-}
static inline void _debug_uart_putc(int ch) { struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE;
- while (!(serial_din(&com_port->lsr) & UART_LSR_THRE)) {
if (!NS16550_read_baud_divisor(com_port))
return;
- }
- while (!(serial_din(&com_port->lsr) & UART_LSR_THRE))
serial_dout(&com_port->thr, ch);;
}

On Mon, Dec 03, 2018 at 09:55:33PM +0100, Simon Goldschmidt wrote:
This reverts commit 6f57c34473d37b8da5e6a3764d0d377d748aeef1 since it does not seem to work at least on rk3399.
The Rockchip Technical Reference Manual (TRM) for the rk3399 says the baud rate prescaler register is readable only when USR[0] is zero. Since this bit is defined as "reserved" in the socfpga cylcone5 TRM, let's rather drop this than making the ns16550 debug uart more platform specific.
Reported-by: Roosen Henri Henri.Roosen@ginzinger.com Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com Reviewed-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
Applied to u-boot/master, thanks!
participants (4)
-
Kever Yang
-
Philipp Tomsich
-
Simon Goldschmidt
-
Tom Rini