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