diff options
author | Furquan Shaikh <furquan@chromium.org> | 2017-04-17 15:41:18 -0700 |
---|---|---|
committer | Furquan Shaikh <furquan@google.com> | 2017-04-19 19:19:56 +0200 |
commit | 342f5f836c4c375d551087eab4c45fe904eef278 (patch) | |
tree | 2d0f5a865bba25f9872448aba46c003826e0c882 | |
parent | 22b22b698860165a9bcebe6b691257f3fdedba85 (diff) | |
download | coreboot-342f5f836c4c375d551087eab4c45fe904eef278.tar.xz |
libpayload/libc/console: Flush input driver buffer on init
When console input driver registers itself, perform flush of input
buffer to avoid interpreting any stale key presses before libpayload
is run.
keyboard.c: Remove the redundant buffer flush.
8250.c: Ensure that serial_hardware_is_present is set before call to
add input driver.
BUG=b:37273808
TEST=Verified that any key presses in serial console before payload is
up do not have any effect after the payload starts running.
Change-Id: I46f1b6715ccf6418f5b2c741bf90db2ece26a60d
Signed-off-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: https://review.coreboot.org/19345
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r-- | payloads/libpayload/drivers/keyboard.c | 3 | ||||
-rw-r--r-- | payloads/libpayload/drivers/serial/8250.c | 2 | ||||
-rw-r--r-- | payloads/libpayload/libc/console.c | 3 |
3 files changed, 4 insertions, 4 deletions
diff --git a/payloads/libpayload/drivers/keyboard.c b/payloads/libpayload/drivers/keyboard.c index 23c87803a8..056aa24957 100644 --- a/payloads/libpayload/drivers/keyboard.c +++ b/payloads/libpayload/drivers/keyboard.c @@ -310,9 +310,6 @@ void keyboard_init(void) if (inb(0x64) == 0xFF) return; - /* Empty keyboard buffer */ - while (keyboard_havechar()) keyboard_getchar(); - console_add_input_driver(&cons); } diff --git a/payloads/libpayload/drivers/serial/8250.c b/payloads/libpayload/drivers/serial/8250.c index 1fcf36dee6..9327304248 100644 --- a/payloads/libpayload/drivers/serial/8250.c +++ b/payloads/libpayload/drivers/serial/8250.c @@ -137,10 +137,10 @@ void serial_console_init(void) return; serial_init(); + serial_hardware_is_present = 1; console_add_input_driver(&consin); console_add_output_driver(&consout); - serial_hardware_is_present = 1; } void serial_putchar(unsigned int c) diff --git a/payloads/libpayload/libc/console.c b/payloads/libpayload/libc/console.c index caeb582945..b57fc47bf6 100644 --- a/payloads/libpayload/libc/console.c +++ b/payloads/libpayload/libc/console.c @@ -76,6 +76,9 @@ void console_add_input_driver(struct console_input_driver *in) /* Check if this driver was already added to the console list */ if (input_driver_exists(in)) return; + /* Flush out the driver input buffer. */ + while (in->havekey()) + in->getchar(); in->next = console_in; console_in = in; } |