svn commit: r368130 - in head: share/man/man4 sys/dev/ftwd sys/modules sys/modules/ftwd

Poul-Henning Kamp phk at FreeBSD.org
Sat Nov 28 22:34:35 UTC 2020


Author: phk
Date: Sat Nov 28 22:34:33 2020
New Revision: 368130
URL: https://svnweb.freebsd.org/changeset/base/368130

Log:
  Add watchdog(9) driver for the Fintek F81803 SuperIO chip

Added:
  head/share/man/man4/ftwd.4   (contents, props changed)
  head/sys/dev/ftwd/
  head/sys/dev/ftwd/ftwd.c   (contents, props changed)
  head/sys/modules/ftwd/
  head/sys/modules/ftwd/Makefile   (contents, props changed)
Modified:
  head/share/man/man4/Makefile
  head/sys/modules/Makefile

Modified: head/share/man/man4/Makefile
==============================================================================
--- head/share/man/man4/Makefile	Sat Nov 28 18:09:16 2020	(r368129)
+++ head/share/man/man4/Makefile	Sat Nov 28 22:34:33 2020	(r368130)
@@ -158,6 +158,7 @@ MAN=	aac.4 \
 	ffclock.4 \
 	filemon.4 \
 	firewire.4 \
+	${_ftwd.4} \
 	full.4 \
 	fwe.4 \
 	fwip.4 \
@@ -785,6 +786,7 @@ _chvgpio.4=	chvgpio.4
 _coretemp.4=	coretemp.4
 _cpuctl.4=	cpuctl.4
 _dpms.4=	dpms.4
+_ftwd.4=	ftwd.4
 _hpt27xx.4=	hpt27xx.4
 _hptiop.4=	hptiop.4
 _hptmv.4=	hptmv.4

Added: head/share/man/man4/ftwd.4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/share/man/man4/ftwd.4	Sat Nov 28 22:34:33 2020	(r368130)
@@ -0,0 +1,66 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+.\"
+.\" Copyright (c) 2012 Bjoern A. Zeeb <bz at FreeBSD.org>
+.\" Copyright (c) 2019 Andriy Gapon <avg at FreeBSD.org>
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd November 26, 2020
+.Dt FTWD 4
+.Os
+.Sh NAME
+.Nm ftwd
+.Nd Fintek F81803 watchdog timer
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device superio"
+.Cd "device ftwd"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the following
+line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+ftwd_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides
+.Xr watchdog 4
+support for the watchdog timer in the Fintek F81803 chip.
+.Sh SEE ALSO
+.Xr superio 4 ,
+.Xr watchdog 4 ,
+.Xr device.hints 5 ,
+.Xr watchdog 8 ,
+.Xr watchdogd 8 ,
+.Xr watchdog 9
+.Sh AUTHORS
+.An -nosplit
+This manual page was written by
+.An Poul-Henning Kamp Aq Mt phk at FreeBSD.org .

Added: head/sys/dev/ftwd/ftwd.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/dev/ftwd/ftwd.c	Sat Nov 28 22:34:33 2020	(r368130)
@@ -0,0 +1,157 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020 Poul-Henning Kamp
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/eventhandler.h>
+#include <sys/module.h>
+#include <sys/rman.h>
+#include <sys/systm.h>
+#include <sys/watchdog.h>
+
+#include <dev/superio/superio.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+
+struct ftwd_softc {
+	eventhandler_tag	wd_ev;
+};
+
+static void
+ftwd_func(void *priv, u_int cmd, int *error)
+{
+	device_t dev = priv;
+	uint64_t timeout;
+	uint8_t val = 0;
+	uint8_t minutes = 0;
+
+	if (cmd != 0) {
+		cmd &= WD_INTERVAL;
+
+		/* Convert the requested timeout to seconds. */
+		if (cmd >= WD_TO_1SEC)
+			timeout = (uint64_t)1 << (cmd - WD_TO_1SEC);
+		else
+			timeout = 1;
+
+		if (timeout <= UINT8_MAX) {
+			val = timeout;
+			*error = 0;
+		} else if ((timeout / 60) <= UINT8_MAX) {
+			val = timeout / 60;
+			minutes = 1;
+			*error = 0;
+		}
+	}
+	if (bootverbose) {
+                if (val == 0) {
+			device_printf(dev, "disabling watchdog\n");
+		} else {
+			device_printf(dev,
+			    "arm watchdog to %d %s%s (Was: 0x%02x)\n",
+			    val, minutes ? "minute" : "second",
+                            val == 1 ? "" : "s",
+			    superio_read(dev, 0xf6)
+			);
+		}
+	}
+	superio_write(dev, 0xf0, 0x00);		// Disable WDTRST#
+	superio_write(dev, 0xf6, val);		// Set Counter
+
+	if (minutes)
+		superio_write(dev, 0xf5, 0x7d);	// minutes, act high, 125ms
+	else
+		superio_write(dev, 0xf5, 0x75);	// seconds, act high, 125ms
+
+	if (val)
+		superio_write(dev, 0xf7, 0x01);	// Disable PME
+	if (val)
+		superio_write(dev, 0xf0, 0x81);	// Enable WDTRST#
+	else
+		superio_write(dev, 0xf0, 0x00);	// Disable WDTRST
+}
+
+static int
+ftwd_probe(device_t dev)
+{
+
+	if (superio_vendor(dev) != SUPERIO_VENDOR_FINTEK ||
+	    superio_get_type(dev) != SUPERIO_DEV_WDT)
+		return (ENXIO);
+	device_set_desc(dev, "Watchdog Timer on Fintek SuperIO");
+	return (BUS_PROBE_DEFAULT);
+}
+
+static int
+ftwd_attach(device_t dev)
+{
+	struct ftwd_softc *sc = device_get_softc(dev);
+
+	/*
+	 * We do not touch the watchdog at this time, it might be armed
+	 * by firmware to protect the full boot sequence.
+	 */
+
+	sc->wd_ev = EVENTHANDLER_REGISTER(watchdog_list, ftwd_func, dev, 0);
+	return (0);
+}
+
+static int
+ftwd_detach(device_t dev)
+{
+	struct ftwd_softc *sc = device_get_softc(dev);
+	int dummy;
+
+	if (sc->wd_ev != NULL)
+		EVENTHANDLER_DEREGISTER(watchdog_list, sc->wd_ev);
+	ftwd_func(dev, 0, &dummy);
+	return (0);
+}
+
+static device_method_t ftwd_methods[] = {
+	DEVMETHOD(device_probe,		ftwd_probe),
+	DEVMETHOD(device_attach,	ftwd_attach),
+	DEVMETHOD(device_detach,	ftwd_detach),
+	{ 0, 0 }
+};
+
+static driver_t ftwd_driver = {
+	"ftwd",
+	ftwd_methods,
+	sizeof (struct ftwd_softc)
+};
+
+static devclass_t ftwd_devclass;
+
+DRIVER_MODULE(ftwd, superio, ftwd_driver, ftwd_devclass, NULL, NULL);
+MODULE_DEPEND(ftwd, superio, 1, 1, 1);
+MODULE_VERSION(ftwd, 1);

Modified: head/sys/modules/Makefile
==============================================================================
--- head/sys/modules/Makefile	Sat Nov 28 18:09:16 2020	(r368129)
+++ head/sys/modules/Makefile	Sat Nov 28 22:34:33 2020	(r368130)
@@ -121,6 +121,7 @@ SUBDIR=	\
 	filemon \
 	firewire \
 	firmware \
+	${_ftwd} \
 	fusefs \
 	${_fxp} \
 	gem \
@@ -618,6 +619,7 @@ _cpufreq=	cpufreq
 _dpms=		dpms
 _em=		em
 _et=		et
+_ftwd=		ftwd
 _exca=		exca
 _if_ndis=	if_ndis
 _io=		io

Added: head/sys/modules/ftwd/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/modules/ftwd/Makefile	Sat Nov 28 22:34:33 2020	(r368130)
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+.PATH: ${SRCTOP}/sys/dev/ftwd
+
+KMOD=	ftwd
+SRCS=	ftwd.c
+SRCS+=	device_if.h bus_if.h isa_if.h
+
+.include <bsd.kmod.mk>


More information about the svn-src-head mailing list