u-boot/0013-Disable-timer-check-in-file-loading.patch
Guillaume GARDET c8dcbf9278 Accepting request 1165560 from hardware👢staging
- Update to 2024.04:
  * Full changelog available at:
    https://source.denx.de/u-boot/u-boot/-/compare/v2024.01...v2024.04
- Patch queue updated from https://github.com/openSUSE/u-boot.git tumbleweed-2024.04
  * Patches dropped:
  0017-rpi5-add-initial-memory-map-for-bcm.patch
  0018-rpi5-Use-devicetree-as-alternative-.patch
  0019-rpi5-Use-devicetree-to-retrieve-boa.patch
  0020-bcm2835-Dynamically-calculate-bytes.patch
  0021-mmc-bcmstb-Add-support-for-bcm2712-.patch
  0022-configs-rpi_arm64-enable-SDHCI-BCMS.patch
  0023-configs-rpi_arm64-build-position-in.patch

OBS-URL: https://build.opensuse.org/request/show/1165560
OBS-URL: https://build.opensuse.org/package/show/hardware:boot/u-boot?expand=0&rev=208
2024-04-05 11:38:32 +00:00

49 lines
1.8 KiB
Diff

From 191bc93ee08af47e96f50c78a7ef9c82f9886cf0 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);