Skip to content

Commit

Permalink
serial/serial_arc: switch from {read|write}l to {read|write}b accessors
Browse files Browse the repository at this point in the history
This is required for proper functionality on big-endian targets.
Memory-mapped registres of ARC UART are not 32-bit words but 8-bit bytes
so on little-endian target either acessor (_l or _b) works fine.
On big-endian only _b accessors works as expected.

Signed-off-by: Alexey Brodkin <[email protected]>

Cc: Vineet Gupta <[email protected]>
Cc: Noam Camus <[email protected]>
Cc: Tom Rini <[email protected]>
  • Loading branch information
abrodkin authored and trini committed Feb 21, 2014
1 parent 1d568c7 commit 94b5400
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions drivers/serial/serial_arc.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ static void arc_serial_setbrg(void)
gd->baudrate = CONFIG_BAUDRATE;

arc_console_baud = gd->cpu_clk / (gd->baudrate * 4) - 1;
writel(arc_console_baud & 0xff, &regs->baudl);
writeb(arc_console_baud & 0xff, &regs->baudl);

#ifdef CONFIG_ARC
/*
Expand All @@ -50,11 +50,11 @@ static void arc_serial_setbrg(void)
* Until that is fixed, when running on ISS, we will set baudh to !0
*/
if (gd->arch.running_on_hw)
writel((arc_console_baud & 0xff00) >> 8, &regs->baudh);
writeb((arc_console_baud & 0xff00) >> 8, &regs->baudh);
else
writel(1, &regs->baudh);
writeb(1, &regs->baudh);
#else
writel((arc_console_baud & 0xff00) >> 8, &regs->baudh);
writeb((arc_console_baud & 0xff00) >> 8, &regs->baudh);
#endif
}

Expand All @@ -70,15 +70,15 @@ static void arc_serial_putc(const char c)
if (c == '\n')
arc_serial_putc('\r');

while (!(readl(&regs->status) & UART_TXEMPTY))
while (!(readb(&regs->status) & UART_TXEMPTY))
;

writel(c, &regs->data);
writeb(c, &regs->data);
}

static int arc_serial_tstc(void)
{
return !(readl(&regs->status) & UART_RXEMPTY);
return !(readb(&regs->status) & UART_RXEMPTY);
}

static int arc_serial_getc(void)
Expand All @@ -87,10 +87,10 @@ static int arc_serial_getc(void)
;

/* Check for overflow errors */
if (readl(&regs->status) & UART_OVERFLOW_ERR)
if (readb(&regs->status) & UART_OVERFLOW_ERR)
return 0;

return readl(&regs->data) & 0xFF;
return readb(&regs->data) & 0xFF;
}

static void arc_serial_puts(const char *s)
Expand Down

0 comments on commit 94b5400

Please sign in to comment.