[coreboot-gerrit] New patch to review for coreboot: 9213b3e libpayload: ipq808x: stale interrupt shall not be cleared unconditionally

Marc Jones (marc.jones@se-eng.com) gerrit at coreboot.org
Fri Mar 13 22:04:02 CET 2015


Marc Jones (marc.jones at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8667

-gerrit

commit 9213b3ea5a33fea8bfb858ccc397320fb72af123
Author: Yogesh Lal <ylal at codeaurora.org>
Date:   Fri Jun 27 12:07:51 2014 +0530

    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.
    
    Original-Change-Id: I016afb01a77cd14764f0176f6bf144fb29796c2f
    Original-Signed-off-by: Yogesh Lal <ylal at codeaurora.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/209512
    Original-Reviewed-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Commit-Queue: Vadim Bendebury <vbendeb at chromium.org>
    Original-Tested-by: Vadim Bendebury <vbendeb at chromium.org>
    (cherry picked from commit 61528884ad2c0a8e146054bbfeb01a3bc73b9692)
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
    
    Change-Id: I936af5daa52a25f62133bdf9fb44f0b68cf34e88
---
 payloads/libpayload/drivers/serial/ipq806x.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/payloads/libpayload/drivers/serial/ipq806x.c b/payloads/libpayload/drivers/serial/ipq806x.c
index 834389e..912893d 100644
--- a/payloads/libpayload/drivers/serial/ipq806x.c
+++ b/payloads/libpayload/drivers/serial/ipq806x.c
@@ -152,9 +152,6 @@ static unsigned msm_boot_uart_dm_read(void)
 		return IPQ_UART_DM_E_RX_NOT_READY;
 	}
 
-	/* Clear stale event. */
-	writel(IPQ_UART_DM_CMD_RES_STALE_INT, IPQ_UART_DM_CR(base));
-
 	/* Read UART_DM_RX_TOTAL_SNAP for actual number of bytes received */
 	if (total_rx_data == 0)
 		total_rx_data =  readl(IPQ_UART_DM_RX_TOTAL_SNAP(base));



More information about the coreboot-gerrit mailing list