omap2/3/4: serial: errata i202: fix for MDR1 access
authorDeepak K <deepak.k@ti.com>
Wed, 7 Jul 2010 09:47:46 +0000 (12:47 +0300)
committerTony Lindgren <tony@atomide.com>
Wed, 7 Jul 2010 10:39:51 +0000 (13:39 +0300)
commit7729415fe857b268d1956c1ef0e65b4be4b9bbf6
treeaffdf82a10b20062939fb54479fdf6b41e9824ab
parentdb398621564ff772b1d40a2db8555bf2c6cfba3a
omap2/3/4: serial: errata i202: fix for MDR1 access

Errata i202 (OMAP3430 - 1.12, OMAP3630 - 1.6):
UART module MDR1 register access can cause a dummy underrun
condition which could result in a freeze in the case of IrDA
communication or if used as UART, corrupted data.

Workaround is as follows for everytime MDR1 register is changed:
* setup all required UART registers
* setup MDR1.MODE_SELECT bit field
* Wait 5 L4 clk cycles + 5 UART functional clock cycles
* Clear the Tx and RX fifo using FCR register

Note: The following step is not done as I am assuming it is not
needed due to reconfiguration being done and there is no halted
operation perse.
* Read if required, the RESUME register to resume halted operation

Based on an earlier patch at:
http://git.omapzoom.org/?p=kernel/omap.git;a=commitdiff;h=42d4a342c009bd9727c100abc8a4bc3063c22f0c

Signed-off-by: Deepak K <deepak.k@ti.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/serial.c