svn commit: r333212 - head/sys/dev/amdsbwd
Andriy Gapon
avg at FreeBSD.org
Thu May 3 15:33:19 UTC 2018
Author: avg
Date: Thu May 3 15:33:18 2018
New Revision: 333212
URL: https://svnweb.freebsd.org/changeset/base/333212
Log:
amdsbwd: add suspend and resume methods
Without the suspend method the watchdog may fire in S1 state. Without
the resume method the watchdog is not re-enabled after returning from S3
state. I observe this on one of my systems.
Not sure if watchdog(4) should participate in the suspend actions.
Right now everything is up to individual drivers.
MFC after: 2 weeks
Modified:
head/sys/dev/amdsbwd/amdsbwd.c
Modified: head/sys/dev/amdsbwd/amdsbwd.c
==============================================================================
--- head/sys/dev/amdsbwd/amdsbwd.c Thu May 3 15:01:27 2018 (r333211)
+++ head/sys/dev/amdsbwd/amdsbwd.c Thu May 3 15:33:18 2018 (r333212)
@@ -104,12 +104,16 @@ static void amdsbwd_identify(driver_t *driver, device_
static int amdsbwd_probe(device_t dev);
static int amdsbwd_attach(device_t dev);
static int amdsbwd_detach(device_t dev);
+static int amdsbwd_suspend(device_t dev);
+static int amdsbwd_resume(device_t dev);
static device_method_t amdsbwd_methods[] = {
DEVMETHOD(device_identify, amdsbwd_identify),
DEVMETHOD(device_probe, amdsbwd_probe),
DEVMETHOD(device_attach, amdsbwd_attach),
DEVMETHOD(device_detach, amdsbwd_detach),
+ DEVMETHOD(device_suspend, amdsbwd_suspend),
+ DEVMETHOD(device_resume, amdsbwd_resume),
#if 0
DEVMETHOD(device_shutdown, amdsbwd_detach),
#endif
@@ -553,3 +557,30 @@ amdsbwd_detach(device_t dev)
return (0);
}
+static int
+amdsbwd_suspend(device_t dev)
+{
+ struct amdsbwd_softc *sc;
+ uint32_t val;
+
+ sc = device_get_softc(dev);
+ val = wdctrl_read(sc);
+ val &= ~AMDSB_WD_RUN;
+ wdctrl_write(sc, val);
+ return (0);
+}
+
+static int
+amdsbwd_resume(device_t dev)
+{
+ struct amdsbwd_softc *sc;
+
+ sc = device_get_softc(dev);
+ wdctrl_write(sc, AMDSB_WD_FIRED);
+ if (sc->active) {
+ amdsbwd_tmr_set(sc, sc->timeout);
+ amdsbwd_tmr_enable(sc);
+ amdsbwd_tmr_reload(sc);
+ }
+ return (0);
+}
More information about the svn-src-head
mailing list