diff options
| author | Sam Protsenko <[email protected]> | 2025-10-26 19:24:58 -0500 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2025-12-05 16:23:54 -0600 |
| commit | af38567cadcaa4842d85af179254886a50c93fc9 (patch) | |
| tree | 3a9df1699ce138fd311a34961b0f4fba042fc031 /common | |
| parent | 43ca62bf1943eb3e170cd408be0d2c2a2404b4c2 (diff) | |
autoboot: Fix inconsistent countdown output
Commit 5f70be08b015 ("Fix autoboot countdown printing wrong") introduces
inconsistency in how the countdown is displayed. For example, in case
when BOOTDELAY=5, the next output is observed during the boot:
Hit any key to stop autoboot: 5
Hit any key to stop autoboot: 4
Hit any key to stop autoboot: 3
That happens due to different printf format (%2d vs %1d). Moreover, the
mentioned commit fails to handle the case when the user is holding some
key before the countdown is shown. E.g. if BOOTDELAY=101, the next
malformed output is being produced:
Hit any key to stop autoboot: 1 0
That's because the fast path code wasn't modified accordingly, and still
tries to erase the number using '\b\b\b' format.
Fix both issues by introducing a dedicated routine for printing the
whole countdown line.
Fixes: 5f70be08b015 ("Fix autoboot countdown printing wrong")
Signed-off-by: Sam Protsenko <[email protected]>
Reviewed-by: Tom Rini <[email protected]>
Acked-by: David Zang <[email protected]>
Diffstat (limited to 'common')
| -rw-r--r-- | common/autoboot.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/common/autoboot.c b/common/autoboot.c index e39f4a32f95..1783ef92c94 100644 --- a/common/autoboot.c +++ b/common/autoboot.c @@ -5,6 +5,7 @@ */ #include <config.h> +#include <ansi.h> #include <autoboot.h> #include <bootretry.h> #include <cli.h> @@ -376,19 +377,24 @@ static int abortboot_key_sequence(int bootdelay) return abort; } +static void print_boot_delay(int bootdelay) +{ + printf(ANSI_CLEAR_LINE "\rHit any key to stop autoboot: %d", bootdelay); +} + static int abortboot_single_key(int bootdelay) { int abort = 0; unsigned long ts; - printf("Hit any key to stop autoboot: %2d ", bootdelay); + print_boot_delay(bootdelay); /* * Check if key already pressed */ if (tstc()) { /* we got a key press */ getchar(); /* consume input */ - puts("\b\b\b 0"); + print_boot_delay(0); abort = 1; /* don't auto boot */ } @@ -410,7 +416,7 @@ static int abortboot_single_key(int bootdelay) udelay(10000); } while (!abort && get_timer(ts) < 1000); - printf("\rHit any key to stop autoboot: %1d\033[K", bootdelay); + print_boot_delay(bootdelay); } putc('\n'); |
