summaryrefslogtreecommitdiff
path: root/resources/grub/patches/0005-at-keyboard-timeout.patch
blob: bdc2955c67bba4473c944d558da6d02205121c34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From 674002256247a01f4969a3795a5aceca68792a55 Mon Sep 17 00:00:00 2001
From: Riku Viitanen <riku.viitanen@protonmail.com>
Date: Fri, 21 Apr 2023 21:41:07 +0300
Subject: [PATCH] at_keyboard.c: add timeout to fix hang on hp elitebooks

This fixes GRUB on Coreboot on HP EliteBooks by implementing
a 200ms timeout. GRUB used to hang. see: https://ticket.coreboot.org/issues/141
---
 grub-core/term/at_keyboard.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
index 597111077..28d1d0a77 100644
--- a/grub-core/term/at_keyboard.c
+++ b/grub-core/term/at_keyboard.c
@@ -42,7 +42,16 @@ keyboard_controller_wait_until_ready (void)
 {
   /* 50 us would be enough but our current time resolution is 1ms.  */
   grub_millisleep (1);
-  while (! KEYBOARD_COMMAND_ISREADY (grub_inb (KEYBOARD_REG_STATUS)));
+
+  unsigned i = 200;
+  while (! KEYBOARD_COMMAND_ISREADY (grub_inb (KEYBOARD_REG_STATUS))) {
+    grub_millisleep (1);
+
+    /* Timeout */
+    if (! i--) {
+      break;
+    }
+  }
 }
 
 static grub_uint8_t
-- 
2.40.0