[coreboot] [RFC] [flashrom] "accelerated" high-level external programmer functions and serial external programmer protocol

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Fri Jun 5 14:17:16 CEST 2009

On 05.06.2009 14:02, Urja Rannikko wrote:
>> What about introducing a per-programmer delay function pointer instead?
>> Your programmer could buffer everything (delays, writes) until the first
>> read, then send them as a batch.

Stefan pointed out that my text above is ambiguous.

Let me retry:
We have delays(mostly udelay) in the flashrom code, but almost always we
don't want to delay flashrom operation, but make sure we honor the
timing for flash chip accesses.
For on-board programming, this is basically udelay.
For external programmers, it is a bit more difficult. Some have builtin
delay functions (like the TotalPhase Cheetah), some require the host to
take care of delays.
Having a per-programmer delay function would solve this nicely.

> The only problem i see here that in order for this to work properly, i
> would need to create the buffer on the programmer side (otherwise
> there could be too big delays between the packets (even if streaming a
> buffered store from the computer), eg. network packet loss) and i'm
> not sure whether the AVR's 1k SRAM would be enough to hold even the
> low level description of a single page load, given address + data = 4
> bytes + 1 byte operation = 5*256 = 1280 bytes. ofcourse the addresses
> could be "compressed" (sequential), but it still doesnt sound right -
> even simple op+byte would be 512+ bytes. We could compress down to op
> + n + n bytes ... that could work. Not sure.

The buffer management would be performed by the programmer driver. So if
your programmer can execute (or buffer) 1024 bytes of
commands/address/data, make sure flashrom accumulates no more than 1024
bytes in its internal buffer before flushing its buffer to the device.

>> The only remaining issue would be fast read, but for that it's easy to
>> replace chip_readl (32bits) with chip_readn (n bytes).

Your programmer driver could hook chip_readn (and possibly chip_writen)
and implement optimized batch writes there.

> I sent this accidentally only to carl-daniel first, sorry.

No problem. Thanks for resending.

I hope my explanation was easier to understand this time.



More information about the coreboot mailing list