summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorSam Protsenko <[email protected]>2025-10-26 19:24:58 -0500
committerTom Rini <[email protected]>2025-12-05 16:23:54 -0600
commitaf38567cadcaa4842d85af179254886a50c93fc9 (patch)
tree3a9df1699ce138fd311a34961b0f4fba042fc031 /common
parent43ca62bf1943eb3e170cd408be0d2c2a2404b4c2 (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.c12
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');