coreboot/payloads/libpayload/drivers
Yogesh Lal 61528884ad libpayload: ipq808x: stale interrupt shall not be cleared unconditionally
The serial driver hangs in cases when FIFO has more than single word to be
processed. Easiest way to reproduce is to paste a string of greater than 4
characters in cli.

Clearing the RXSTALE interrupt without draining all the characters from FIFO
leads to the issue as the driver is dependent on msm_boot_uart_dm_read
function to reinitialize for next transfer.

Logically the driver is organized in such a manner that next transfer never
gets initiated till rx_data_read < total_rx_data. Clearing the RXSTALE without
consideration of total number of characters (or words) unprocessed makes the
msm_boot_uart_dm_read to return on the first if conditional. Thus the driver is
stuck forever.

A quick fix is to avoid clearing the stale interrupt. Reset is handled whenever
a new transfer is initialized in msm_boot_uart_dm_init_rx_transfer.

BUG=chrome-os-partner:29542
TEST=manual
	-Paste a string greater than 4 characters in cli.

Change-Id: I016afb01a77cd14764f0176f6bf144fb29796c2f
Signed-off-by: Yogesh Lal <ylal@codeaurora.org>
Reviewed-on: https://chromium-review.googlesource.com/209512
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
Tested-by: Vadim Bendebury <vbendeb@chromium.org>
2014-07-26 02:43:49 +00:00
..
serial libpayload: ipq808x: stale interrupt shall not be cleared unconditionally 2014-07-26 02:43:49 +00:00
storage libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2013-08-14 17:05:33 -07:00
timer libpayload: Support board veyron 2014-07-02 00:47:36 +00:00
usb libpayload: usb: xhci: Fix TD size if it overflows 5 bits 2014-05-31 03:59:57 +00:00
video libpayload: video: Check for 'console' pointer before dereferencing it 2014-05-21 20:32:10 +00:00
cbmem_console.c libpayload: console: Allow output drivers to print whole strings at once 2014-04-30 10:00:35 +00:00
hid.c make keyboard reset driver generic (not pc keyboard driver dependent) 2010-03-25 18:52:24 +00:00
keyboard.c libpayload: Remove unnecessary keyboard mode setting code 2013-09-14 01:31:10 +00:00
Makefile.inc libpayload: Support board veyron 2014-07-02 00:47:36 +00:00
nvram.c libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2013-08-14 17:05:33 -07:00
options.c libpayload: Fix lookup by label in CMOS layouts 2012-11-30 06:05:50 +01:00
pci.c [PATCH] libpayload: Fix the PCI search function 2008-10-20 16:52:06 +00:00
speaker.c Fix libpayload speaker driver 2011-10-27 10:49:41 +02:00