]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
term/at_keyboard: Add timeout to fix hang on HP EliteBooks
authorRiku Viitanen <riku.viitanen@protonmail.com>
Sun, 23 Apr 2023 09:59:34 +0000 (09:59 +0000)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 16 May 2023 14:52:15 +0000 (16:52 +0200)
This fixes the GRUB on Coreboot on HP EliteBooks by implementing
a 200 ms timeout. The GRUB used to hang.

Fixes: https://ticket.coreboot.org/issues/141
Signed-off-by: Riku Viitanen <riku.viitanen@protonmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/term/at_keyboard.c

index 597111077bd174da1b4d803431528be52c6e00d4..f8a129eb7f1f3cbc2e104274e8b14c15ada86377 100644 (file)
@@ -40,9 +40,19 @@ grub_keyboard_controller_init (void);
 static void
 keyboard_controller_wait_until_ready (void)
 {
+  unsigned int i = 200;
+
   /* 50 us would be enough but our current time resolution is 1ms.  */
   grub_millisleep (1);
-  while (! KEYBOARD_COMMAND_ISREADY (grub_inb (KEYBOARD_REG_STATUS)));
+
+  while (!KEYBOARD_COMMAND_ISREADY (grub_inb (KEYBOARD_REG_STATUS)))
+    {
+      grub_millisleep (1);
+
+      /* Timeout. */
+      if (!i--)
+       break;
+    }
 }
 
 static grub_uint8_t