amba pl011: workaround for uart registers lockup
authorShreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
Mon, 13 Jun 2011 08:11:33 +0000 (10:11 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 16 Jun 2011 19:01:57 +0000 (12:01 -0700)
commitc16d51a32bbb61ac8fd96f78b5ce2fccfe0fb4c3
tree3899f24f4b1cc06e24055952f1d9114dc493caf0
parent57f2104f39995bac332ddc492fbf60aa28e0c35e
amba pl011: workaround for uart registers lockup

This workaround aims to break the deadlock situation
which raises during continuous transfer of data for long
duration over uart with hardware flow control. It is
observed that CTS interrupt cannot be cleared in uart
interrupt register (ICR). Hence further transfer over
uart gets blocked.

It is seen that during such deadlock condition ICR
don't get cleared even on multiple write. This leads
pass_counter to decrease and finally reach zero. This
can be taken as trigger point to run this UART_BT_WA.

Workaround backups the register configuration, does soft
reset of UART using BIT-0 of PRCC_K_SOFTRST_SET/CLEAR
registers and restores the registers.

This patch also provides support for uart init and exit
function calls if present.

Signed-off-by: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/serial/amba-pl011.c
include/linux/amba/serial.h