Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Nov 2010 15:35:08 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r215868 - head/sys/dev/ichwd
Message-ID:  <201011261535.oAQFZ8FT051259@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011261535.oAQFZ8FT051259>