changes today.

YhLu YhLu at
Thu Sep 30 12:14:01 CEST 2004

I guess 82801er need that too.


-----Original Message-----
From: Ronald G. Minnich [mailto:rminnich at] 
Sent: Thursday, September 30, 2004 9:38 AM
To: linuxbios at
Subject: changes today. 

A few changes that are important to some of you. 

First, I found a fun problem in the i82801dbm early smbus code. It starts 
an op, then waits for the 'active' bit to go to zero. The CPU is so fast 
that it polls before the bit goes to one, sees that it is zero, says 'the 
op is done', then gets an error because the right done bit is not set. The 
result on the digital Logic adl855pc was that it would not reliably read 
the smbus. 

So I've added, to this file: 

this function: 
> static int smbus_wait_until_active(void)
> {
>       unsigned long loops;
>       loops = SMBUS_TIMEOUT;
>       do {
>               unsigned char val;
>               smbus_delay();
>               val = inb(SMBUS_IO_BASE + SMBHSTSTAT);
>               if ((val & 1)) {
>                       break;
>               }
>       } while(--loops);
>       return loops?0:-4;
> }

which I hope is the right way to do this :-)

And in the smbus_read_byte, it now calls the function in this manner: 
>       /* poll for it to start */
>       if (smbus_wait_until_active() < 0) {
>               return -4;
>       }

in other words, wait until it is started BEFORE you see if it is done :-)

This affects all mobos using this part; let me know if it is trouble for 
you. It should not be.

Next, flash_and_burn now has an erase_block_jedec function, and I have 
added support for the SST firmware hub parts. Tested and working on the 1 
MBYTE SST part (49LF008A)

Linuxbios mailing list
Linuxbios at

More information about the coreboot mailing list