kern/52752: [PATCH] SMBus controller on ICH4 not recognized in
-STABLE
Dmitry Pryanishnikov
dmitry at atlantis.dp.ua
Wed May 28 05:20:16 PDT 2003
>Number: 52752
>Category: kern
>Synopsis: [PATCH] SMBus controller on ICH4 not recognized in -STABLE
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed May 28 05:20:14 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Dmitry Pryanishnikov
>Release: FreeBSD 4.7-RELEASE i386
>Organization:
Atlantis ISP
>Environment:
System: FreeBSD atlantis.atlantis.dp.ua 4.7-RELEASE FreeBSD 4.7-RELEASE #0: Sat Mar 29 14:01:49 EET 2003 root at atlantis.atlantis.dp.ua:/usr/src/sys/compile/ATLANTIS i386
Intel D845EBG2 motherboard, south bridge is ICH4.
>Description:
4-STABLE doesn't recognize SMBus controller in ICH4 southbridge, dmesg
shows only one line:
ichsmb0: <SMBus controller> port 0xe000-0xe01f irq 11 at device 31.3 on pci0
and no "smbus0:" or "smb0:" lines, healthd -S doesn't work (device not
configured). Motherboards with ICH4 are popular, and there is thermal monitor
chip on SMBus that would be nice to access.
>How-To-Repeat:
Build custom kernel with the following options on 4-STABLE:
device smbus
device ichsmb
device smb
Boot it on motherboard with ICH4 southbridge. Note that there is no smb0
device.
>Fix:
Apply the following patch in /sys/dev/ichsmb (this is actually an MFC of
revision 1.5):
========================================================================
--- ichsmb_pci.c.orig Sun Oct 20 00:00:00 2002
+++ ichsmb_pci.c Fri Apr 25 12:14:00 2003
@@ -41,7 +41,7 @@
/*
* Support for the SMBus controller logical device which is part of the
- * Intel 81801AA (ICH) and 81801AB (ICH0) I/O controller hub chips.
+ * Intel 81801AA/AB/BA/CA/DC (ICH/ICH[0234]) I/O controller hub chips.
*/
#include <sys/param.h>
@@ -68,6 +68,7 @@
#define ID_82801AB 0x24238086
#define ID_82801BA 0x24438086
#define ID_82801CA 0x24838086
+#define ID_82801DC 0x24C38086
#define PCIS_SERIALBUS_SMBUS_PROGIF 0x00
@@ -125,6 +126,9 @@
break;
case ID_82801CA:
device_set_desc(dev, "Intel 82801CA (ICH3) SMBus controller");
+ break;
+ case ID_82801DC:
+ device_set_desc(dev, "Intel 82801DC (ICH4) SMBus controller");
break;
default:
if (pci_get_class(dev) == PCIC_SERIALBUS
========================================================================
Rebuild and install kernel, reboot. Now dmesg's output will contain:
ichsmb0: <Intel 82801DC (ICH4) SMBus controller> port 0xe000-0xe01f irq 11 at
device 31.3 on pci0
smbus0: <System Management Bus> on ichsmb0
smb0: <SMBus general purpose I/O> on smbus0
and SMBus access works correctly (tested with my own healthd patch for AD1025
thermal monitor).
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list