serial/serial_arc: add work-around of ISS bug
Explanation is in in-lined comment. Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Noam Camus <noamc@ezchip.com> Cc: Tom Rini <trini@ti.com>
This commit is contained in:
parent
6853e6aa77
commit
1d568c7666
@ -39,7 +39,23 @@ static void arc_serial_setbrg(void)
|
|||||||
|
|
||||||
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, ®s->baudl);
|
writel(arc_console_baud & 0xff, ®s->baudl);
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARC
|
||||||
|
/*
|
||||||
|
* UART ISS(Instruction Set simulator) emulation has a subtle bug:
|
||||||
|
* A existing value of Baudh = 0 is used as a indication to startup
|
||||||
|
* it's internal state machine.
|
||||||
|
* Thus if baudh is set to 0, 2 times, it chokes.
|
||||||
|
* This happens with BAUD=115200 and the formaula above
|
||||||
|
* 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, ®s->baudh);
|
||||||
|
else
|
||||||
|
writel(1, ®s->baudh);
|
||||||
|
#else
|
||||||
writel((arc_console_baud & 0xff00) >> 8, ®s->baudh);
|
writel((arc_console_baud & 0xff00) >> 8, ®s->baudh);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arc_serial_init(void)
|
static int arc_serial_init(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user