Hi, Just pinging whether this patch is all good or if something else is needed to be merged.
Thanks, Juuso ________________________________ From: Stefan Roese <[email protected]> Sent: Friday, 8 May 2026 14.49 To: Juuso Rinta (Nokia) <[email protected]>; [email protected] <[email protected]> Cc: Peng Fan <[email protected]>; Tom Rini <[email protected]>; Patrice Chotard <[email protected]>; Yao Zi <[email protected]> Subject: Re: [PATCH RESEND] watchdog: sbsa_gwdt: clamp WOR value to hw max [You don't often get email from [email protected]. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ] CAUTION: This is an external email. Please be very careful when clicking links or opening attachments. See the URL nok.it/ext for additional information. On 5/4/26 11:34, Juuso Rinta wrote: > The WOR register is 32 bits, so any tick count exceeding U32_MAX is > truncated by writel(). A large requested timeout can wrap to a small > value causing the watchdog to fire sooner than requested. > > Clamp the calculated value to U32_MAX prior to writing the register so > over-large requests will be set to the maximum timeout value. > > Found by code review. > > Signed-off-by: Juuso Rinta <[email protected]> Reviewed-by: Stefan Roese <[email protected]> Thanks, Stefan > --- > drivers/watchdog/sbsa_gwdt.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c > index 807884c5bc7..3a924cb2b9a 100644 > --- a/drivers/watchdog/sbsa_gwdt.c > +++ b/drivers/watchdog/sbsa_gwdt.c > @@ -50,6 +50,7 @@ static int sbsa_gwdt_start(struct udevice *dev, u64 > timeout, ulong flags) > { > struct sbsa_gwdt_priv *priv = dev_get_priv(dev); > u32 clk; > + u64 tout_wdog; > > /* > * it work in the single stage mode in u-boot, > @@ -58,8 +59,13 @@ static int sbsa_gwdt_start(struct udevice *dev, u64 > timeout, ulong flags) > * to half value of timeout. > */ > clk = get_tbclk(); > - writel(clk / (2 * 1000) * timeout, > - priv->reg_control + SBSA_GWDT_WOR); > + > + /* if requested timeout overflows, clamp it to u32_max */ > + tout_wdog = ((u64)clk * timeout) / (2 * 1000); > + if (tout_wdog > U32_MAX) > + tout_wdog = U32_MAX; > + > + writel(tout_wdog, priv->reg_control + SBSA_GWDT_WOR); > > /* writing WCS will cause an explicit watchdog refresh */ > writel(SBSA_GWDT_WCS_EN, priv->reg_control + SBSA_GWDT_WCS); > > --- > base-commit: 4433253ecf2041f9362a763bb6cb79960921ac7e > change-id: 20260428-fix-sbsa-timeout-overflow-20cf84fa8a6b > > Best regards, > -- > Juuso Rinta <[email protected]>

