419fa61f37
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@codeaurora.org> Original-Reviewed-on: https://chromium-review.googlesource.com/209512 Original-Reviewed-by: Vadim Bendebury <vbendeb@chromium.org> Original-Commit-Queue: Vadim Bendebury <vbendeb@chromium.org> Original-Tested-by: Vadim Bendebury <vbendeb@chromium.org> (cherry picked from commit 61528884ad2c0a8e146054bbfeb01a3bc73b9692) Signed-off-by: Marc Jones <marc.jones@se-eng.com> Change-Id: I936af5daa52a25f62133bdf9fb44f0b68cf34e88 Reviewed-on: http://review.coreboot.org/8667 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org> |
||
---|---|---|
.. | ||
arch | ||
bin | ||
configs | ||
crypto | ||
curses | ||
drivers | ||
gdb | ||
include | ||
libc | ||
libcbfs | ||
liblzma | ||
libpci | ||
sample | ||
tests | ||
util | ||
Config.in | ||
Doxyfile | ||
LICENSES | ||
LICENSE_GPL | ||
Makefile | ||
Makefile.inc | ||
README |
README
------------------------------------------------------------------------------- libpayload README ------------------------------------------------------------------------------- libpayload is a minimal library to support standalone payloads that can be booted with firmware like coreboot. It handles the setup code, and provides common C library symbols such as malloc() and printf(). Note: This is _not_ a standard library for use with an operating system, rather it's only useful for coreboot payload development! See http://coreboot.org for details on coreboot. Installation ------------ $ git clone http://review.coreboot.org/p/coreboot.git $ cd coreboot/payloads/libpayload $ make menuconfig $ make $ sudo make install (optional, will install into /opt per default) As libpayload is for 32bit x86 systems only, you might have to install the 32bit libgcc version, otherwise your payloads will fail to compile. On Debian systems you'd do 'apt-get install gcc-multilib' for example. Usage ----- Here's an example of a very simple payload (hello.c) and how to build it: #include <libpayload.h> int main(void) { printf("Hello, world!\n"); return 0; } Building the payload using the 'lpgcc' compiler wrapper: $ lpgcc -o hello.elf hello.c Please see the sample/ directory for details. Website and Mailing List ------------------------ The main website is http://www.coreboot.org/Libpayload. For additional information, patches, and discussions, please join the coreboot mailing list at http://coreboot.org/Mailinglist, where most libpayload developers are subscribed. Copyright and License --------------------- See LICENSES.