kern/52752: [PATCH] SMBus controller on ICH4 not recognized in -STABLE

Dmitry Pryanishnikov dmitry at
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
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed May 28 05:20:14 PDT 2003
>Originator:     Dmitry Pryanishnikov
>Release:        FreeBSD 4.7-RELEASE i386
Atlantis ISP
System: FreeBSD 4.7-RELEASE FreeBSD 4.7-RELEASE #0: Sat Mar 29 14:01:49 EET 2003 root at i386

Intel D845EBG2 motherboard, south bridge is ICH4.


 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.


 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


 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
@@ -125,6 +126,9 @@
 	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");
 		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).

More information about the freebsd-bugs mailing list