]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
watchdog: mpc8xxx: Fix timer value
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Thu, 27 Jun 2024 08:26:08 +0000 (10:26 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 5 Jul 2024 19:57:02 +0000 (13:57 -0600)
Timer value is a 16 bits calculated from the wanted timeout and the
system clock. On powerpc/8xx, a timeout of 2s gives a value which
is over U16_MAX so U16_MAX shall be used. But the calculation is
casted to u16 so at the end the result is 63770 instead of 128906.

So the timer gets loaded with 63770 instead of 65535. It is not
a big difference in that case, but lets make the code correct and
cast to u32 instead of u16.

Fixes: 26e8ebcd7cb7 ("watchdog: mpc8xxx: Make it generic")
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
drivers/watchdog/mpc8xxx_wdt.c

index 036ff690d3fd49e5d5d48d70bb839877db47969b..7fcb866f5742c0686bc8578b035870c755291aed 100644 (file)
@@ -43,7 +43,7 @@ static int mpc8xxx_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
        struct mpc8xxx_wdt_priv *priv = dev_get_priv(dev);
        const char *mode = env_get("watchdog_mode");
        ulong prescaler = dev_get_driver_data(dev);
-       u16 swtc = min_t(u16, timeout * get_board_sys_clk() / 1000 / prescaler, U16_MAX);
+       u16 swtc = min_t(u32, timeout * get_board_sys_clk() / 1000 / prescaler, U16_MAX);
        u32 val;
 
        mpc8xxx_wdt_reset(dev);