Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 09 Feb 2026 10:23:37 +0000
From:      Tom Jones <thj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: ccb0e6e15f3d - main - aw_wdog: Add support for H616
Message-ID:  <6989b5a9.1f68c.51672a09@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by thj:

URL: https://cgit.FreeBSD.org/src/commit/?id=ccb0e6e15f3dd00288d1823ffaf6920916ae457c

commit ccb0e6e15f3dd00288d1823ffaf6920916ae457c
Author:     Tom Jones <thj@FreeBSD.org>
AuthorDate: 2026-02-09 10:05:46 +0000
Commit:     Tom Jones <thj@FreeBSD.org>
CommitDate: 2026-02-09 10:22:19 +0000

    aw_wdog: Add support for H616
    
    Reviewed by:    manu
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D54913
---
 sys/arm/allwinner/aw_wdog.c | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/sys/arm/allwinner/aw_wdog.c b/sys/arm/allwinner/aw_wdog.c
index acfbdd8fe6d0..b6b2749f0cda 100644
--- a/sys/arm/allwinner/aw_wdog.c
+++ b/sys/arm/allwinner/aw_wdog.c
@@ -52,25 +52,32 @@
 #define	A10_WDOG_CTRL		0x00
 #define	A31_WDOG_CTRL		0x10
 #define	D1_WDOG_CTRL		0x10
+#define	H616_WDOG_CTRL		0xB0
 #define	 WDOG_CTRL_RESTART	(1 << 0)
 #define	 A31_WDOG_CTRL_KEY	(0xa57 << 1)
 #define	 D1_WDOG_CTRL_KEY	(0xa57 << 1)
+#define	 H616_WDOG_CTRL_KEY	(0xa57 << 1)
 #define	A10_WDOG_MODE		0x04
 #define	A31_WDOG_MODE		0x18
 #define	D1_WDOG_MODE		0x18
+#define	H616_WDOG_MODE		0xB8
 #define	 D1_WDOG_MODE_KEY	(0x16AA << 16)
 #define	 A10_WDOG_MODE_INTVL_SHIFT	3
 #define	 A31_WDOG_MODE_INTVL_SHIFT	4
 #define	 D1_WDOG_MODE_INTVL_SHIFT	4
+#define	 H616_WDOG_MODE_INTVL_SHIFT	4
 #define	 A10_WDOG_MODE_RST_EN	(1 << 1)
 #define	 WDOG_MODE_EN		(1 << 0)
 #define	A31_WDOG_CONFIG		0x14
 #define	D1_WDOG_CONFIG		0x14
+#define	H616_WDOG_CONFIG	0xB4
 #define	 A31_WDOG_CONFIG_RST_EN_SYSTEM	(1 << 0)
 #define	 A31_WDOG_CONFIG_RST_EN_INT	(2 << 0)
 #define	 D1_WDOG_CONFIG_KEY		(0x16AA << 16)
 #define	 D1_WDOG_CONFIG_RST_EN_SYSTEM	(1 << 0)
 #define	 D1_WDOG_CONFIG_RST_EN_INT	(2 << 0)
+#define	 H616_WDOG_CONFIG_RST_EN_SYSTEM	(1 << 0)
+#define	 H616_WDOG_CONFIG_RST_EN_INT	(2 << 0)
 
 struct aw_wdog_interval {
 	uint64_t	milliseconds;
@@ -109,14 +116,18 @@ struct aw_wdog_softc {
 	uint32_t		wdog_config_value;
 };
 
-#define	A10_WATCHDOG	1
-#define	A31_WATCHDOG	2
-#define	D1_WATCHDOG	3
+enum wdog_type {
+	A10_WATCHDOG = 1,
+	A31_WATCHDOG,
+	D1_WATCHDOG,
+	H616_WATCHDOG,
+};
 
 static struct ofw_compat_data compat_data[] = {
 	{"allwinner,sun4i-a10-wdt", A10_WATCHDOG},
 	{"allwinner,sun6i-a31-wdt", A31_WATCHDOG},
 	{"allwinner,sun20i-d1-wdt", D1_WATCHDOG},
+	{"allwinner,sun50i-h616-wdt", H616_WATCHDOG},
 	{NULL,             0}
 };
 
@@ -139,6 +150,9 @@ aw_wdog_probe(device_t dev)
 	case D1_WATCHDOG:
 		device_set_desc(dev, "Allwinner D1 Watchdog");
 		return (BUS_PROBE_DEFAULT);
+	case H616_WATCHDOG:
+		device_set_desc(dev, "Allwinner H616 Watchdog");
+		return (BUS_PROBE_DEFAULT);
 	}
 	return (ENXIO);
 }
@@ -192,6 +206,16 @@ aw_wdog_attach(device_t dev)
 		sc->wdog_config = D1_WDOG_CONFIG;
 		sc->wdog_config_value = D1_WDOG_CONFIG_KEY | D1_WDOG_CONFIG_RST_EN_SYSTEM;
 		break;
+	case H616_WATCHDOG:
+		sc->wdog_ctrl = H616_WDOG_CTRL;
+		sc->wdog_ctrl_key = H616_WDOG_CTRL_KEY;
+		sc->wdog_mode = H616_WDOG_MODE;
+		sc->wdog_mode_key = 0;
+		sc->wdog_mode_intvl_shift = H616_WDOG_MODE_INTVL_SHIFT;
+		sc->wdog_mode_en = WDOG_MODE_EN;
+		sc->wdog_config = H616_WDOG_CONFIG;
+		sc->wdog_config_value = H616_WDOG_CONFIG_RST_EN_SYSTEM;
+		break;
 	default:
 		bus_release_resource(dev, SYS_RES_MEMORY, rid, sc->res);
 		return (ENXIO);


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6989b5a9.1f68c.51672a09>