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