Re: SMBus controller

From: Sean Bruno <sbruno_at_ignoranthack.me>
Date: Sat, 14 Jun 2014 16:48:30 -0700
On Sat, 2014-06-14 at 17:25 -0600, Warner Losh wrote:
> On Jun 14, 2014, at 4:43 PM, Sean Bruno <sbruno_at_ignoranthack.me> wrote:
> 
> > On Sat, 2014-06-14 at 12:08 -0700, Sean Bruno wrote: 
> >> I note that my TLenovo 61 has one of these:
> >> 
> >> ichsmb0_at_pci0:0:31:3:	class=0x0c0500 card=0x20a917aa chip=0x283e8086
> >> rev=0x03 hdr=0x00
> >>    vendor     = 'Intel Corporation'
> >>    device     = '82801H (ICH8 Family) SMBus Controller'
> >>    class      = serial bus
> >>    subclass   = SMBus
> >> 
> >> 
> > 
> > So, there's something broken in the initialization of the driver and the
> > driver dependencies here.
> > 
> > If I load "smb.ko" by itself, no other modules are loaded (ichsmb,
> > smbus).  Should it?
> 
> I don’t think so. If I kldload pci, would you expect most of the drivers in the system to be loaded?
> 

Heck if I know.  :-)  

I would suspect that of the three, ichsmb, smbus or smb, one of these
should cause the other two to be loaded.  This is not the case.

> > If I load ichsmb, smbus is loaded, so that's good.  But, the first time
> > I do this, the driver seems to think I have 16 bus instances:
> > 
> > 
> > iicsmb0: <SMBus over I2C bridge> on iicbus0
> > iicsmb1: <SMBus over I2C bridge> on iicbus1
> > iicsmb2: <SMBus over I2C bridge> on iicbus2
> > iicsmb3: <SMBus over I2C bridge> on iicbus3
> > iicsmb4: <SMBus over I2C bridge> on iicbus4
> > iicsmb5: <SMBus over I2C bridge> on iicbus5
> > iicsmb6: <SMBus over I2C bridge> on iicbus6
> > iicsmb7: <SMBus over I2C bridge> on iicbus7
> > iicsmb8: <SMBus over I2C bridge> on iicbus8
> > iicsmb9: <SMBus over I2C bridge> on iicbus9
> > iicsmb10: <SMBus over I2C bridge> on iicbus10
> > iicsmb11: <SMBus over I2C bridge> on iicbus11
> > iicsmb12: <SMBus over I2C bridge> on iicbus12
> > iicsmb13: <SMBus over I2C bridge> on iicbus13
> > iicsmb14: <SMBus over I2C bridge> on iicbus14
> > iicsmb15: <SMBus over I2C bridge> on iicbus15
> > smbus0: <System Management Bus> on iicsmb0
> > smbus1: <System Management Bus> on iicsmb1
> > smbus2: <System Management Bus> on iicsmb2
> > smbus3: <System Management Bus> on iicsmb3
> > smbus4: <System Management Bus> on iicsmb4
> > smbus5: <System Management Bus> on iicsmb5
> > smbus6: <System Management Bus> on iicsmb6
> > smbus7: <System Management Bus> on iicsmb7
> > smbus8: <System Management Bus> on iicsmb8
> > smbus9: <System Management Bus> on iicsmb9
> > smbus10: <System Management Bus> on iicsmb10
> > smbus11: <System Management Bus> on iicsmb11
> > smbus12: <System Management Bus> on iicsmb12
> > smbus13: <System Management Bus> on iicsmb13
> > smbus14: <System Management Bus> on iicsmb14
> > smbus15: <System Management Bus> on iicsmb15
> > 
> > I then load smb.ko and I get no useful output from smbmsg -p.
> > 
> > If I try to acces /dev/smb1, ctrl-c it, unload all modules and then
> > reload them, I get completely different (and functional) behavior.  I
> > only get ONE smbus and I can poll "devices" there, even though I have no
> > idea what they are.
> > 
> > ichsmb0: <Intel 82801H (ICH8) SMBus controller> port 0x1c60-0x1c7f mem
> > 0xfe227400-0xfe2274ff irq 23 at device 31.3 on pci0
> > smbus0: <System Management Bus> on ichsmb0
> > smb0: <SMBus generic I/O> on smbus0
> > root_at_bruno:/home/sbruno # smbmsg -p
> > Probing for devices on /dev/smb0:
> > Device _at_0x10: w
> > Device _at_0x88: rw
> > Device _at_0xa8: w
> > Device _at_0xaa: rw
> > Device _at_0xac: rw
> > Device _at_0xae: rw
> > Device _at_0xb8: rw
> > Device _at_0xc2: w
> > Device _at_0xc8: w
> > 
> > 
> > 
> > 
> > 
> > 
> > Right ... so, I did the following:
> > 
> > kldload ichsmb
> > 
> > This seems to know to bull in smbus.ko.
> 
> I kinda think that’s a bug. Makes it impossible to load/unload smbus independent of ichsmb. pccard had that issue, but I fixed it eons ago. However, it might be a necessary at the moment bug due to symbols being exported from smbus.ko that are needed btt ichsmb…
> 
> 
> > ichsmb0: <Intel 82801H (ICH8) SMBus controller> port 0x1c60-0x1c7f mem
> > 0xfe227400-0xfe2274ff irq 23 at device 31.3 on pci0
> > smbus0: <System Management Bus> on ichsmb0
> > 
> > 
> > This doesn't really do anything useful, until I load "smb.ko”:
> 
> That makes sense to me. Again, each of these things is independent, or should be.
> 
> It sounds like there’s other breakage going on. You might want to see what putting it in your kernel tells you.
> 
> Warner


Does it make sense that "16" devices are detected until I attempt to
access a non existent one, reload the modules and then it seems to work
correctly?  It looks like something in initialization is hosed.

sean
Received on Sat Jun 14 2014 - 21:48:36 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:50 UTC