aboutsummaryrefslogtreecommitdiff
path: root/drivers/serial/serial_arc.c
diff options
context:
space:
mode:
authorPali Rohár2022-12-11 00:31:21 +0100
committerTom Rini2023-01-02 16:01:40 -0500
commit1138bbe05e617034cf542ac0bc13cfa804cb09f6 (patch)
tree78bc2257f2d725955ac2145571ab586ac28d126a /drivers/serial/serial_arc.c
parent59440d83d38bfed31931d11aa06a3fb56acbd2f0 (diff)
serial: Use -EAGAIN in getc and putc
U-Boot serial code already handles -EAGAIN value from getc and putc callbacks. So change drivers code to return -EAGAIN when HW is busy instead of doing its own busy loop and waiting until HW is ready. Signed-off-by: Pali Rohár <pali@kernel.org>
Diffstat (limited to 'drivers/serial/serial_arc.c')
-rw-r--r--drivers/serial/serial_arc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/serial/serial_arc.c b/drivers/serial/serial_arc.c
index b2d95bdbe18..c2fc8a901e2 100644
--- a/drivers/serial/serial_arc.c
+++ b/drivers/serial/serial_arc.c
@@ -53,8 +53,8 @@ static int arc_serial_putc(struct udevice *dev, const char c)
struct arc_serial_plat *plat = dev_get_plat(dev);
struct arc_serial_regs *const regs = plat->reg;
- while (!(readb(&regs->status) & UART_TXEMPTY))
- ;
+ if (!(readb(&regs->status) & UART_TXEMPTY))
+ return -EAGAIN;
writeb(c, &regs->data);
@@ -83,8 +83,8 @@ static int arc_serial_getc(struct udevice *dev)
struct arc_serial_plat *plat = dev_get_plat(dev);
struct arc_serial_regs *const regs = plat->reg;
- while (!arc_serial_tstc(regs))
- ;
+ if (!arc_serial_tstc(regs))
+ return -EAGAIN;
/* Check for overflow errors */
if (readb(&regs->status) & UART_OVERFLOW_ERR)