Hung-Te Lin has submitted this change. ( https://review.coreboot.org/c/coreboot/+/47085 )
Change subject: libpayload/keyboard: Avoid races around input draining ......................................................................
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 --- M payloads/libpayload/drivers/i8042/keyboard.c 1 file changed, 5 insertions(+), 4 deletions(-)
Approvals: build bot (Jenkins): Verified Angel Pons: Looks good to me, approved
diff --git a/payloads/libpayload/drivers/i8042/keyboard.c b/payloads/libpayload/drivers/i8042/keyboard.c index 46afdc0..9da3902 100644 --- a/payloads/libpayload/drivers/i8042/keyboard.c +++ b/payloads/libpayload/drivers/i8042/keyboard.c @@ -374,11 +374,13 @@ 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 @@ 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);