mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-14 15:29:35 +02:00
Fix GRUB handling of the E6400 keyboard
This introduces a patch to grub which disables the coreboot specific handling, allowing PS/2 keyboards to be handled the same as i386-pc. However this alone breaks the keyboard in Linux, requiring coreboot to perform PS/2 initialization. I think GRUB may be restoring the original configuration of the PS/2 controller once it exits, and if coreboot doesn't initialize the controller then it's restored to the default state which Linux doesn't seem to like. I think the emulated keyboard interface provided by the EC on the E6400 behaves in a non-standard way that is incompatible with the old coreboot specific handling.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
From 14090113f9e0fd67e46de33dad609c1406373ff0 Mon Sep 17 00:00:00 2001
|
||||
From: Nicholas Chin <nic.c3.14@gmail.com>
|
||||
Date: Wed, 19 Apr 2023 13:59:38 -0600
|
||||
Subject: [PATCH] Fix PS/2 scancode set inconsistency
|
||||
|
||||
GRUB seems to be expecting set 2 scancodes when built as a coreboot
|
||||
payload, but PS/2 controllers outputting using set 1 will lead to an
|
||||
unusable keyboard. Disable the coreboot specific logic which hard codes
|
||||
the translated set 2 keyboard configuration and let GRUB handle
|
||||
keyboard init the same way as i386-pc, which did not have this issue.
|
||||
---
|
||||
grub-core/term/at_keyboard.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
|
||||
index 597111077..bb251e222 100644
|
||||
--- a/grub-core/term/at_keyboard.c
|
||||
+++ b/grub-core/term/at_keyboard.c
|
||||
@@ -87,7 +87,7 @@ grub_keyboard_controller_write (grub_uint8_t c)
|
||||
grub_outb (c, KEYBOARD_REG_DATA);
|
||||
}
|
||||
|
||||
-#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS)
|
||||
+#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS)
|
||||
#define USE_SCANCODE_SET 1
|
||||
#else
|
||||
#define USE_SCANCODE_SET 0
|
||||
@@ -260,7 +260,7 @@ grub_keyboard_controller_init (void)
|
||||
#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS)
|
||||
grub_keyboard_controller_orig = 0;
|
||||
grub_keyboard_orig_set = 2;
|
||||
-#elif defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_COREBOOT)
|
||||
+#elif defined (GRUB_MACHINE_QEMU)
|
||||
/* *BSD relies on those settings. */
|
||||
grub_keyboard_controller_orig = KEYBOARD_AT_TRANSLATE;
|
||||
grub_keyboard_orig_set = 2;
|
||||
--
|
||||
2.40.0
|
||||
|
||||
Reference in New Issue
Block a user