summaryrefslogtreecommitdiff
path: root/payloads
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@google.com>2019-02-28 16:35:21 +0800
committerDuncan Laurie <dlaurie@chromium.org>2019-03-02 06:17:36 +0000
commit5aa0e925bc6ff359f1b7e82413fb035c5293bb1e (patch)
treedcde8ef54ff4a0a17fd2f279b06ed6039d4ecbcd /payloads
parentf1b58b78351d7ed220673e688a2f7bc9e96da4e2 (diff)
libpayload: keyboard: Add option to ignore failures during init
If keys are pressed at boot some keyboard controllers will not properly respond with an ACK to commands, which results in the keyboard_init function aborting before it adds the keyboard to the input device list. This same keyboard controller will manage to properly return keyboard data when keys are pressed later, so it is possible for it to be functional in the payload even if it does not respond properly to every command during initialization. In order to allow payloads to use the keyboard when this happens a new Kconfig option is added to ignore the keyboard ACK response and always add the keyboard to the input device list. This option is disabled by default and must be enabled by the specific boards that need it. BUG=b:126633269 TEST=boot on device with this controller and press keys during boot and see that the keyboard is still functional in the payload. Change-Id: Icc6053f99804f1b57d785cb04235b5c4b8d5426f Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/c/31657 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'payloads')
-rw-r--r--payloads/libpayload/Kconfig4
-rw-r--r--payloads/libpayload/drivers/i8042/keyboard.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/payloads/libpayload/Kconfig b/payloads/libpayload/Kconfig
index a79269f8f0..fd967c1a52 100644
--- a/payloads/libpayload/Kconfig
+++ b/payloads/libpayload/Kconfig
@@ -344,6 +344,10 @@ config PC_KEYBOARD
default y if ARCH_X86 # uses IO
default n
+config PC_KEYBOARD_IGNORE_INIT_FAILURE
+ bool "Ignore keyboard failures during init and always add input device"
+ default n
+
config PC_KEYBOARD_LAYOUT_US
bool "English (US) keyboard layout"
depends on PC_KEYBOARD
diff --git a/payloads/libpayload/drivers/i8042/keyboard.c b/payloads/libpayload/drivers/i8042/keyboard.c
index 062aec2bf0..a0d5b63e13 100644
--- a/payloads/libpayload/drivers/i8042/keyboard.c
+++ b/payloads/libpayload/drivers/i8042/keyboard.c
@@ -309,16 +309,16 @@ void keyboard_init(void)
/* Set scancode set 1 */
ret = keyboard_cmd(I8042_KBCMD_SET_SCANCODE);
- if (!ret)
+ if (!ret && !IS_ENABLED(CONFIG_LP_PC_KEYBOARD_IGNORE_INIT_FAILURE))
return;
ret = keyboard_cmd(I8042_SCANCODE_SET_1);
- if (!ret)
+ if (!ret && !IS_ENABLED(CONFIG_LP_PC_KEYBOARD_IGNORE_INIT_FAILURE))
return;
/* Enable scanning */
ret = keyboard_cmd(I8042_KBCMD_EN);
- if (!ret)
+ if (!ret && !IS_ENABLED(CONFIG_LP_PC_KEYBOARD_IGNORE_INIT_FAILURE))
return;
console_add_input_driver(&cons);