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:
southbridge/intel/i82801dbm/i82801dbm_early_smbus.c
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)
ron