svn commit: r215868 - head/sys/dev/ichwd

[ Available lists | Index of svn-src-all | Month of Nov 2010 | Week of 26 Nov 2010 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Attilio Rao <attilio@FreeBSD.org>
Date
26 Nov 2010 15:35:09
Subject
svn commit: r215868 - head/sys/dev/ichwd
Message-ID
201011261535.oAQFZ8FT051259@svn.freebsd.org


[ Hide this part ]
Author: attilio
Date: Fri Nov 26 15:35:08 2010
New Revision: 215868
URL: http://svn.freebsd.org/changeset/base/215868

Log:
- Advertise when the reboot came from a watchdog-induced reset.
- Fix a bug where TCO_BOOT_STS was supposed to be cleared after
TCO_SECOND_TO_STS and not before.

Sponsored by: Sandvine Incorporated
Submitted by: Mark Johnston <mjohnston at sandvine dot com>
Reviewed by: des
MFC after: 10 days

Modified:
head/sys/dev/ichwd/ichwd.c

Modified: head/sys/dev/ichwd/ichwd.c
==============================================================================
--- head/sys/dev/ichwd/ichwd.c Fri Nov 26 15:33:09 2010 (r215867)
+++ head/sys/dev/ichwd/ichwd.c Fri Nov 26 15:35:08 2010 (r215868)
@@ -225,12 +225,12 @@ ichwd_sts_reset(struct ichwd_softc *sc)
* by writing a 1, not a 0.
*/
ichwd_write_tco_2(sc, TCO1_STS, TCO_TIMEOUT);
- /*
- * XXX The datasheet says that TCO_SECOND_TO_STS must be cleared
- * before TCO_BOOT_STS, not the other way around.
+ /*
+ * According to Intel's docs, clearing SECOND_TO_STS and BOOT_STS must
+ * be done in two separate operations.
*/
- ichwd_write_tco_2(sc, TCO2_STS, TCO_BOOT_STS);
ichwd_write_tco_2(sc, TCO2_STS, TCO_SECOND_TO_STS);
+ ichwd_write_tco_2(sc, TCO2_STS, TCO_BOOT_STS);
}

/*
@@ -520,11 +520,12 @@ ichwd_attach(device_t dev)
device_get_desc(dev), sc->ich_version);

/*
- * XXX we should check the status registers (specifically, the
- * TCO_SECOND_TO_STS bit in the TCO2_STS register) to see if we
- * just came back from a watchdog-induced reset, and let the user
- * know.
+ * Determine if we are coming up after a watchdog-induced reset.
+ * This bit is cleared in ichwd_sts_reset().
*/
+ if ((ich_read_tco_2(sc, TCO2_STS) & TCO_SECOND_TO_STS) != 0)
+ device_printf(dev,
+ "resuming after hardware watchdog timeout\n");

/* reset the watchdog status registers */
ichwd_sts_reset(sc);


Elapsed time: 0.106 seconds