Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Jun 2002 02:49:58 +0100 (BST)
From:      =?iso-8859-1?q?Matt=20Sykes?= <mattmsykes@yahoo.co.uk>
To:        freebsd-hardware@freebsd.org
Subject:   [PATCH] P2L97-DS
Message-ID:  <20020621014958.31214.qmail@web21010.mail.yahoo.com>

next in thread | raw e-mail | index | archive | help

Could someone please explain why the P2L97-DS continues to remain
unsupported?  The patch (by Tor Egge) has been around a long time, yet
for some reason has not made it into the source tree.  FreeBSD is broken
without it.

As the mail archives will indicate, I went through *considerable*
effort in diagnosing problems with this motherboard which finally lead
me to this patch.  Even though it's an old board, I see no reason to
put the next person through the same ordeal.

Here is the patch against 4.6-stable (and -release).

*** sys/pci/pcisupport.c.orig	Fri Apr 19 05:52:15 2002
--- sys/pci/pcisupport.c	Thu Jun 20 20:36:32 2002
***************
*** 87,92 ****
--- 87,171 ----
  	}
  }
  
+ #ifdef SMP
+ static void
+ fix_82371ab_power_management(device_t dev)
+ {
+        int pmba;
+        int devctl;
+        int devctl_changed;
+        int devrese;
+        int devresg;
+ 
+ #define PMBA_CONFIG_OFFSET 0x40
+ #define PMBA_TO_IO(addr)  (addr & 0xffc0)
+ #define DEVRESE_OFFSET 0x68
+ #define DEVRESG_OFFSET 0x70
+ #define DEVRES_MONITOR_ENABLE (1 << 20)
+ #define DEVCTL_IO_OFFSET 0x2c
+ #define DEVCTL_TRAP_DEV12 (1 << 24)
+ #define DEVCTL_TRAP_DEV13 (1 << 25)
+ #define RTC_IOADDR 0x70
+ 
+        pmba = pci_read_config(dev, PMBA_CONFIG_OFFSET, 4);
+ 
+        devctl = inl(PMBA_TO_IO(pmba) + DEVCTL_IO_OFFSET);
+        devctl_changed = 0;
+ 
+        devrese = pci_read_config(dev, DEVRESE_OFFSET, 2) |
+                (pci_read_config(dev, DEVRESE_OFFSET + 2, 1) << 16);
+ 
+        if ((devrese & DEVRES_MONITOR_ENABLE) != 0 &&
+            ((devrese >> 16) & 15) <= 7 &&
+            (devrese & 0xffff) == RTC_IOADDR &&
+            (devctl & DEVCTL_TRAP_DEV12) != 0) {
+ 
+                devrese &= ~DEVRES_MONITOR_ENABLE;
+                devctl &= ~DEVCTL_TRAP_DEV12;
+                devctl_changed = 1;
+ 
+                pci_write_config(dev, DEVRESE_OFFSET, 2, (devrese & 0xffff));
+                pci_write_config(dev, DEVRESE_OFFSET + 2, 1,
+                             (devrese >> 16) & 0xff);
+ 
+                printf("Disabled Device 12 trap SMI for access to RTC
chip\n");
+        }
+ 
+        devresg = pci_read_config(dev, DEVRESG_OFFSET, 2) |
+                (pci_read_config(dev, DEVRESG_OFFSET + 2, 1) << 16);
+ 
+        if ((devresg & DEVRES_MONITOR_ENABLE) != 0 &&
+            ((devresg >> 16) & 15) <= 7 &&
+            (devresg & 0xffff) == RTC_IOADDR &&
+            (devctl & DEVCTL_TRAP_DEV13) != 0) {
+ 
+                devresg &= ~DEVRES_MONITOR_ENABLE;
+                devctl &= ~DEVCTL_TRAP_DEV13;
+                devctl_changed = 1;
+ 
+                pci_write_config(dev, DEVRESG_OFFSET, 2, (devresg & 0xffff));
+                pci_write_config(dev, DEVRESG_OFFSET + 2, 1,
+                             (devresg >> 16) & 0xff);
+ 
+                printf("Disabled Device 13 trap SMI for access to RTC
chip\n");
+        }
+ 
+        if (devctl_changed != 0) {
+                outl(PMBA_TO_IO(pmba) + DEVCTL_IO_OFFSET, devctl);
+        }
+ 
+ #undef PMBA_CONFIG_OFFSET
+ #undef PMBA_TO_IO
+ #undef DEVRESE_OFFSET
+ #undef DEVRESG_OFFSET
+ #undef DEVRES_MONITOR_ENABLE
+ #undef DEVCTL_IO_OFFSET
+ #undef DEVCTL_TRAP_DEV12
+ #undef DEVCTL_TRAP_DEV13
+ #undef RTC_IOADDR
+ }
+ #endif
+ 
  static void
  fixwsc_natoma(device_t dev)
  {
***************
*** 1212,1217 ****
--- 1291,1299 ----
  	case 0x71008086:
  		return ("Intel 82439TX System controller (MTXC)");
  	case 0x71138086:
+ #if defined(SMP)
+ 		fix_82371ab_power_management(dev);
+ #endif
  		return ("Intel 82371AB Power management controller");
  	case 0x719b8086:
  		return ("Intel 82443MX Power management controller");


__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hardware" in the body of the message




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