diff options
author | Rasmus Villemoes <rasmus.villemoes@prevas.dk> | 2022-09-27 11:54:02 +0200 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2022-09-27 12:25:51 +0200 |
commit | c11cedc876631c1753427a68db4efaa00f700a79 (patch) | |
tree | 97324575af6a4e81af4140d6281bd6f383c17e46 /common | |
parent | c5f5ee373267d8a73b44ffa0de0d0a1a08115d8f (diff) | |
download | u-boot-c11cedc876631c1753427a68db4efaa00f700a79.zip u-boot-c11cedc876631c1753427a68db4efaa00f700a79.tar.gz u-boot-c11cedc876631c1753427a68db4efaa00f700a79.tar.bz2 |
autoboot: make sure watchdog device(s) are handled with keyed autoboot
Currently, AUTOBOOT_KEYED and its variant AUTOBOOT_ENCRYPTION are
broken when one has an external always-running watchdog device with a
timeout shorter than the configured boot delay (in my case, I have a
gpio-wdt one with a timeout of 1 second), because we fail to call
WATCHDOG_RESET() in the loops where we wait for the bootdelay to
elapse.
This is done implicitly in the !AUTOBOOT_KEYED case,
i.e. abortboot_single_key(), because that loop contains a
udelay(10000), and udelay() does a WATCHDOG_RESET().
To fix this, simply add similar udelay() calls in the other loops.
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'common')
-rw-r--r-- | common/autoboot.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/common/autoboot.c b/common/autoboot.c index 63f2587..cdafe76 100644 --- a/common/autoboot.c +++ b/common/autoboot.c @@ -115,6 +115,7 @@ static int passwd_abort_crypt(uint64_t etime) presskey_len++; } } + udelay(10000); } while (never_timeout || get_ticks() <= etime); return abort; @@ -206,6 +207,7 @@ static int passwd_abort_sha256(uint64_t etime) if (slow_equals(sha, sha_env, SHA256_SUM_LEN)) abort = 1; } + udelay(10000); } while (!abort && get_ticks() <= etime); free(presskey); @@ -293,6 +295,7 @@ static int passwd_abort_key(uint64_t etime) abort = 1; } } + udelay(10000); } while (!abort && get_ticks() <= etime); return abort; |