[PATCH v3 01/13] watchdog: stm32_iwdg: get hardware version during probe

From: Antonio Borneo

Date: Fri Nov 06 2026 - 11:43:16 EST


From: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>

Get the hardware version of the IWDG peripheral during probe.

Signed-off-by: Clément Le Goffic <clement.legoffic@xxxxxxxxxxx>
Signed-off-by: Antonio Borneo <antonio.borneo@xxxxxxxxxxx>
---
drivers/watchdog/stm32_iwdg.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c
index a8d2db2d3cf8b..30b4cbf20afa9 100644
--- a/drivers/watchdog/stm32_iwdg.c
+++ b/drivers/watchdog/stm32_iwdg.c
@@ -30,6 +30,7 @@
#define IWDG_SR 0x0C /* Status Register */
#define IWDG_WINR 0x10 /* Windows Register */
#define IWDG_EWCR 0x14 /* Early Wake-up Register */
+#define IWDG_VERR 0x3F4 /* Version Register */

/* IWDG_KR register bit mask */
#define KR_KEY_RELOAD 0xAAAA /* reload counter enable */
@@ -53,6 +54,9 @@
#define EWCR_EWIC BIT(14) /* Watchdog early interrupt acknowledge */
#define EWCR_EWIE BIT(15) /* Watchdog early interrupt enable */

+/* IWDG_VERR register mask */
+#define VERR_MASK GENMASK(7, 0)
+
/* set timeout to 100000 us */
#define TIMEOUT_US 100000
#define SLEEP_US 1000
@@ -82,6 +86,7 @@ struct stm32_iwdg {
struct clk *clk_lsi;
struct clk *clk_pclk;
unsigned int rate;
+ unsigned int hw_version;
};

static inline u32 reg_read(void __iomem *base, u32 reg)
@@ -351,6 +356,8 @@ static int stm32_iwdg_probe(struct platform_device *pdev)
if (ret)
return ret;

+ wdt->hw_version = reg_read(wdt->regs, IWDG_VERR) & VERR_MASK;
+
watchdog_set_drvdata(wdd, wdt);
watchdog_set_nowayout(wdd, WATCHDOG_NOWAYOUT);
watchdog_init_timeout(wdd, 0, dev);
--
2.34.1