Author: jhb
Date: Tue Feb 26 18:30:47 2013
New Revision: 247332
URL: http://svnweb.freebsd.org/changeset/base/247332

Log:
  Add a quirk to disable this driver for certain older laptops with an ICH2
  southbridge and an Intel 82815_MC host bridge where the host bridge's
  revision is less than 5.
  
  Tested by:    mi
  MFC after:    1 week

Modified:
  head/sys/dev/cpufreq/ichss.c

Modified: head/sys/dev/cpufreq/ichss.c
==============================================================================
--- head/sys/dev/cpufreq/ichss.c        Tue Feb 26 18:19:51 2013        
(r247331)
+++ head/sys/dev/cpufreq/ichss.c        Tue Feb 26 18:30:47 2013        
(r247332)
@@ -67,7 +67,7 @@ struct ichss_softc {
 #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 @@ ichss_identify(driver_t *driver, device_
         * 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 @@ ichss_identify(driver_t *driver, device_
            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));
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to