Skip to content
Snippets Groups Projects
Commit 94b5400e authored by Alexey Brodkin's avatar Alexey Brodkin Committed by Tom Rini
Browse files

serial/serial_arc: switch from {read|write}l to {read|write}b accessors


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: default avatarAlexey Brodkin <abrodkin@synopsys.com>

Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Noam Camus <noamc@ezchip.com>
Cc: Tom Rini <trini@ti.com>
parent 1d568c76
No related branches found
No related tags found
No related merge requests found
...@@ -38,7 +38,7 @@ static void arc_serial_setbrg(void) ...@@ -38,7 +38,7 @@ static void arc_serial_setbrg(void)
gd->baudrate = CONFIG_BAUDRATE; gd->baudrate = CONFIG_BAUDRATE;
arc_console_baud = gd->cpu_clk / (gd->baudrate * 4) - 1; 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 #ifdef CONFIG_ARC
/* /*
...@@ -50,11 +50,11 @@ static void arc_serial_setbrg(void) ...@@ -50,11 +50,11 @@ static void arc_serial_setbrg(void)
* Until that is fixed, when running on ISS, we will set baudh to !0 * Until that is fixed, when running on ISS, we will set baudh to !0
*/ */
if (gd->arch.running_on_hw) if (gd->arch.running_on_hw)
writel((arc_console_baud & 0xff00) >> 8, &regs->baudh); writeb((arc_console_baud & 0xff00) >> 8, &regs->baudh);
else else
writel(1, &regs->baudh); writeb(1, &regs->baudh);
#else #else
writel((arc_console_baud & 0xff00) >> 8, &regs->baudh); writeb((arc_console_baud & 0xff00) >> 8, &regs->baudh);
#endif #endif
} }
...@@ -70,15 +70,15 @@ static void arc_serial_putc(const char c) ...@@ -70,15 +70,15 @@ static void arc_serial_putc(const char c)
if (c == '\n') if (c == '\n')
arc_serial_putc('\r'); 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) static int arc_serial_tstc(void)
{ {
return !(readl(&regs->status) & UART_RXEMPTY); return !(readb(&regs->status) & UART_RXEMPTY);
} }
static int arc_serial_getc(void) static int arc_serial_getc(void)
...@@ -87,10 +87,10 @@ static int arc_serial_getc(void) ...@@ -87,10 +87,10 @@ static int arc_serial_getc(void)
; ;
/* Check for overflow errors */ /* Check for overflow errors */
if (readl(&regs->status) & UART_OVERFLOW_ERR) if (readb(&regs->status) & UART_OVERFLOW_ERR)
return 0; return 0;
return readl(&regs->data) & 0xFF; return readb(&regs->data) & 0xFF;
} }
static void arc_serial_puts(const char *s) static void arc_serial_puts(const char *s)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment