[PATCH 3/6] watchdog: sbsa_gwdt: add get_timeout operation

Juuso Rinta juuso.rinta at nokia.com
Fri Jul 10 06:51:19 CEST 2026


Implement the get_timeout operation for the SBSA watchdog driver.

Add a timeout_ms field in sbsa_gwdt_priv.

In sbsa_gwdt_start(), store the clamped timeout value
written to the register to the timeout_ms field.

In sbsa_gwdt_get_timeout(), write the effective timeout
to *timeout_ms.

Signed-off-by: Juuso Rinta <juuso.rinta at nokia.com>
---
 drivers/watchdog/sbsa_gwdt.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
index 3a924cb2b9a..3e91d093f4d 100644
--- a/drivers/watchdog/sbsa_gwdt.c
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -35,6 +35,7 @@
 struct sbsa_gwdt_priv {
 	void __iomem *reg_refresh;
 	void __iomem *reg_control;
+	u64 timeout_ms;
 };
 
 static int sbsa_gwdt_reset(struct udevice *dev)
@@ -46,6 +47,14 @@ static int sbsa_gwdt_reset(struct udevice *dev)
 	return 0;
 }
 
+static int sbsa_gwdt_get_timeout(struct udevice *dev, u64 *timeout_ms)
+{
+	struct sbsa_gwdt_priv *priv = dev_get_priv(dev);
+	*timeout_ms = priv->timeout_ms;
+
+	return 0;
+}
+
 static int sbsa_gwdt_start(struct udevice *dev, u64 timeout, ulong flags)
 {
 	struct sbsa_gwdt_priv *priv = dev_get_priv(dev);
@@ -65,6 +74,7 @@ static int sbsa_gwdt_start(struct udevice *dev, u64 timeout, ulong flags)
 	if (tout_wdog > U32_MAX)
 		tout_wdog = U32_MAX;
 
+	priv->timeout_ms = clk ? (tout_wdog * 2 * 1000) / clk : 0;
 	writel(tout_wdog, priv->reg_control + SBSA_GWDT_WOR);
 
 	/* writing WCS will cause an explicit watchdog refresh */
@@ -116,6 +126,7 @@ static const struct wdt_ops sbsa_gwdt_ops = {
 	.reset = sbsa_gwdt_reset,
 	.stop = sbsa_gwdt_stop,
 	.expire_now = sbsa_gwdt_expire_now,
+	.get_timeout = sbsa_gwdt_get_timeout,
 };
 
 static const struct udevice_id sbsa_gwdt_ids[] = {

-- 
2.39.2



More information about the U-Boot mailing list