Enumerating the SMBus to get SPD data

Enumerating the SMBus to get SPD data

I'm writing an app which has to talk to the SPD table on a memory module. The app is to run on Win2k and XP onx86 basedPC's. As I am not very well experienced at the hardware level I need a few pointers on how to do this. As far as I know I will have to enumerate the SMBus to find the address of the EEPROM's on each of the installed memory modules. Can I do this by sending an SMB_REQUEST as per the Microsoft DDK documentation? I already have the SPD specs so I know which byte addresses I need to read - I'm just haveing trouble finding the device itself.

Any help appreciated.

Pat Magee

4 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

This is somewhat outside the scope of whatthe Intel Software Networkusually handles, but we will ask our engineering contacts and let you know how they respond.

Regards,

Lexi S.

IntelSoftware NetworkSupport

http://www.intel.com/software

Contact us

Message Edited by intel.software.network.support on 12-01-2005 10:19 AM

Here issome information we received from ourengineering contacts:

The driver you are trying to write is for a function that typically resides in the BIOS. It can be done in a driver just fine, but the SPD addresses that you are interested in are hardware-specific and are either based on a resistor stuffing option on the board, or are somehow jumperable on the board. Most platforms do not have a machine-readable address, but have this hard-coded into the BIOS as a platform dependency. The BIOS can pass the address of various SMBus devices along to the OS in system management tables. This may be what you are thinking when issuing an SMB_REQUEST to the OS, where you would request the physical SMBus addresses of each of the DIMMs SPD prom devices. We cannot say for sure that this SMB_REQUEST OS API does this function, though, as we are not familiar with it.
In the short term, you could find a hardware spec for the platform and physically look up the SPD addresses, then hard code these addresses, or somehow make them configurable in the driver. These, unfortunately, change from platform to platform based on a number of factors (number of memory slots on the platform, number of other SMBus devices present like clock controllers or management controllers). Once you figure out the device addresses, then you need to be able to use the SMBus base address register found in one of the Southbridge PCI functions to read the data that is needed.

We hope this is helpful.

Regards,

Lexi S.

IntelSoftware NetworkSupport

http://www.intel.com/software

Contact us

Message Edited by intel.software.network.support on 12-01-2005 10:20 AM

Very helpful. Thank you very much. As there are quite a few available apps that already do this, I'd hazard a gues that the platform variations cannot be too severe. I try to get a range of hardware data as a starting point and then just keep testing.

Leave a Comment

Please sign in to add a comment. Not a member? Join today