libpayload/keyboard: Avoid races around input draining

Draining the keyboard's buffer is only possible when the keyboard
port is enabled. We should also disable input scanning before, as
the buffer could be filled again with new keystrokes otherwise.

Change-Id: Ibac9c0d04880ff4a3efda5ac53da2f9731f6602c
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/47085
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Nico Huber 2020-11-01 19:49:55 +01:00 committed by Hung-Te Lin
parent f7faac151a
commit 828f6b428e
1 changed files with 5 additions and 4 deletions

View File

@ -374,11 +374,13 @@ void keyboard_init(void)
if (!i8042_probe() || !i8042_has_ps2())
return;
keyboard_drain_input();
/* Enable first PS/2 port */
i8042_cmd(I8042_CMD_EN_KB);
/* Disable scanning */
keyboard_cmd(I8042_KBCMD_DEFAULT_DIS);
keyboard_drain_input();
i8042_set_kbd_translation(false);
if (set_scancode_set(2))
@ -404,10 +406,9 @@ void keyboard_disconnect(void)
if (!i8042_has_ps2())
return;
keyboard_drain_input();
/* Disable scanning */
keyboard_cmd(I8042_KBCMD_DEFAULT_DIS);
keyboard_drain_input();
/* Send keyboard disconnect command */
i8042_cmd(I8042_CMD_DIS_KB);