forked from pool/u-boot
Guillaume GARDET
db0e50077b
- Update to 2024.07: * Full changelog available at: https://source.denx.de/u-boot/u-boot/-/compare/v2024.04...v2024.07 OBS-URL: https://build.opensuse.org/request/show/1197893 OBS-URL: https://build.opensuse.org/package/show/hardware:boot/u-boot?expand=0&rev=212
49 lines
1.8 KiB
Diff
49 lines
1.8 KiB
Diff
From ad4cbcfbbd597cc702c8aa72f73aa7bf1088291b Mon Sep 17 00:00:00 2001
|
|
From: Michael Chang <mchang@suse.com>
|
|
Date: Tue, 25 May 2021 06:45:01 +0000
|
|
Subject: [PATCH] Disable timer check in file loading
|
|
|
|
The u-boot efi console service registers a timer to poll the keyboard
|
|
input in every 50ns. In the efi block io service, this timer is
|
|
evaluated on each block read, and since the timer interval is much less
|
|
than the time needed to reading out a block (32kB) from the disk, the
|
|
keyboard polling is therefore in the wake of each block read.
|
|
|
|
Unfortunately USB keyboard spends too much time in polling. In my test
|
|
usb_kbd_poll_for_event costs 40ms in usb_kbd_testc() to test if a
|
|
character is in the queue. In combination with the number of blocks to
|
|
be read from the disk, the extra amound of time delayed could be around
|
|
30 seconds to load linux and initrd.
|
|
|
|
For that matters, the timer check is disabled in file loading to speed
|
|
it up. The consequence would be losing the keystroke during the time
|
|
file is loading, but that is acceptable IMHO.
|
|
|
|
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
|
---
|
|
lib/efi_loader/efi_disk.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
|
|
index 93a9a5ac02..c194015937 100644
|
|
--- a/lib/efi_loader/efi_disk.c
|
|
+++ b/lib/efi_loader/efi_disk.c
|
|
@@ -18,6 +18,7 @@
|
|
#include <log.h>
|
|
#include <part.h>
|
|
#include <malloc.h>
|
|
+#include <watchdog.h>
|
|
|
|
struct efi_system_partition efi_system_partition = {
|
|
.uclass_id = UCLASS_INVALID,
|
|
@@ -136,8 +137,7 @@ static efi_status_t efi_disk_rw_blocks(struct efi_block_io *this,
|
|
n = blk_dwrite(desc, lba, blocks, buffer);
|
|
}
|
|
|
|
- /* We don't do interrupts, so check for timers cooperatively */
|
|
- efi_timer_check();
|
|
+ schedule();
|
|
|
|
EFI_PRINT("n=%lx blocks=%x\n", n, blocks);
|
|
|