tsod polling in Sandy Bridge

tsod polling in Sandy Bridge

Hi all,

I'm not sure if this is the correct forum, if not I'm hoping someone can direct me to the right forum.  I need to use the Memory controller's SMBUS to access some DIMMS that my company develops.  First I need to turn the tsod polling off.  I have some reference code that runs on the built in EFI shell that does this, but I need it ported to Linux.  I believe my problem is clearing the TSOD_POLL_EN bit in the SMB Control register.  The attribute of this bit is RW-LB:

"Read/Write Lock Bypass : Similar to RWL, these bits can be read and written by software.
HW can make these bits "Read Only" via a separate configuration bit or other logic. However,
RW-LB is a special case where the locking is controlled by the lock-bypass capability that is
controlled by the lock-bypass enable bits. Each lock-bypass enable bit enables a set of config
request sources that can bypass the lock. The requests sourced from the corresponding
bypass enable bits will be lock-bypassed (i.e. RW) while requests sourced from other sources
are under lock control (RO). The lock bit and bypass enable bit are generally defined with RWO
attributes. Sticky can be used with this attribute (RW-SWB). These bits are only reinitialized to
their default values after PWRGOOD. Note that the lock bits may not be sticky, and it is
important that they are written to after reset to guarantee that software will not be able to
change their values after a reset."

Beyond the exerpt from the EDS above I have not found anymore information on the lock-bypass method.

I do not seem to be able to clear it with the following:

pci_write_config_dword(pci_cfg.imc_target.devs[i],SMBUS_CONTROL0,(value & ~(POLL_EN | CLK_OVERRIDE | SMB_DTI_MASK)) | SOFT_RESET | SMB_DTI_EEPROM);

I am able to manipulate the other bits with the attributes of RW. 

My reference code (that runs on the built in EFI shell) does access this registger differently, it accesses the register using bus/dev/func:

  if (reg > 0x100) {
    address = CALC_EFI_PCIEX_ADDRESS(bus, dev, func, reg);
  } else {
    address = CALC_EFI_PCI_ADDRESS (bus, dev, func, reg);
  GlobalIoDev->Pci.Read (

Is the method of access the key?  if not what is the key to writing this bit under Linux?



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

Hi Everyone,

    I need to use the Lock Bypass Mechanism to disable certain bits of a register marked as RW-LB.

    But I am not getting sufficient information in the manual as to how to do so. Can anyone please help.


    Page 29.






Leave a Comment

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