[Midnightbsd-cvs] src [6573] trunk/sys/dev/cpufreq/ichss.c: disable the 82815 chip

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sun Dec 29 15:22:12 EST 2013


Revision: 6573
          http://svnweb.midnightbsd.org/src/?rev=6573
Author:   laffer1
Date:     2013-12-29 15:22:11 -0500 (Sun, 29 Dec 2013)
Log Message:
-----------
disable the 82815 chip

Modified Paths:
--------------
    trunk/sys/dev/cpufreq/ichss.c

Modified: trunk/sys/dev/cpufreq/ichss.c
===================================================================
--- trunk/sys/dev/cpufreq/ichss.c	2013-12-29 18:41:09 UTC (rev 6572)
+++ trunk/sys/dev/cpufreq/ichss.c	2013-12-29 20:22:11 UTC (rev 6573)
@@ -1,4 +1,4 @@
-/* $MidnightBSD: src/sys/dev/cpufreq/ichss.c,v 1.4 2010/03/05 03:52:01 laffer1 Exp $ */
+/* $MidnightBSD$ */
 /*-
  * Copyright (c) 2004-2005 Nate Lawson (SDG)
  * All rights reserved.
@@ -67,7 +67,7 @@
 #define PCI_DEV_82801BA		0x244c /* ICH2M */
 #define PCI_DEV_82801CA		0x248c /* ICH3M */
 #define PCI_DEV_82801DB		0x24cc /* ICH4M */
-#define PCI_DEV_82815BA		0x1130 /* Unsupported/buggy part */
+#define PCI_DEV_82815_MC	0x1130 /* Unsupported/buggy part */
 
 /* PCI config registers for finding PMBASE and enabling SpeedStep. */
 #define ICHSS_PMBASE_OFFSET	0x40
@@ -155,9 +155,6 @@
 	 * E.g. see Section 6.1 "PCI Devices and Functions" and table 6.1 of
 	 * Intel(r) 82801BA I/O Controller Hub 2 (ICH2) and Intel(r) 82801BAM
 	 * I/O Controller Hub 2 Mobile (ICH2-M).
-	 *
-	 * TODO: add a quirk to disable if we see the 82815_MC along
-	 * with the 82801BA and revision < 5.
 	 */
 	ich_device = pci_find_bsf(0, 0x1f, 0);
 	if (ich_device == NULL ||
@@ -167,6 +164,22 @@
 	    pci_get_device(ich_device) != PCI_DEV_82801DB))
 		return;
 
+	/*
+	 * Certain systems with ICH2 and an Intel 82815_MC host bridge
+	 * where the host bridge's revision is < 5 lockup if SpeedStep
+	 * is used.
+	 */
+	if (pci_get_device(ich_device) == PCI_DEV_82801BA) {
+		device_t hostb;
+
+		hostb = pci_find_bsf(0, 0, 0);
+		if (hostb != NULL &&
+		    pci_get_vendor(hostb) == PCI_VENDOR_INTEL &&
+		    pci_get_device(hostb) == PCI_DEV_82815_MC &&
+		    pci_get_revid(hostb) < 5)
+			return;
+	}
+
 	/* Find the PMBASE register from our PCI config header. */
 	pmbase = pci_read_config(ich_device, ICHSS_PMBASE_OFFSET,
 	    sizeof(pmbase));



More information about the Midnightbsd-cvs mailing list