[coreboot] #141: flashrom: Warn the user when trying to read/write chips which are bigger than what the chipset can decode
coreboot
svn at coreboot.org
Sun Jun 14 19:25:06 CEST 2009
#141: flashrom: Warn the user when trying to read/write chips which are bigger
than what the chipset can decode
---------------------------------+------------------------------------------
Reporter: uwe | Owner: somebody
Type: defect | Status: new
Priority: critical | Milestone:
Component: flashrom | Version:
Keywords: | Dependencies:
Patchstatus: there is no patch |
---------------------------------+------------------------------------------
We should make a table in the flashrom code which tells it how much a
given (detected/supported) southbridge can decode.
Then, if the user tries to read/write/erase/verify a chip which is
_bigger_ (e.g. 512 KB) than what the southbridge can decode (e.g. 256 KB
as on the AMD CS5530A for example) flashrom should at the very least warn
the user, probably even bail out with an error.
I've stumbled upon exactly this problem, trying to make a backup of a
512KB chip in an CS5530A system. I ended up with only one half of the
contents (but duplicated) and it _did_ verify OK.
That's because I did 'flashrom -r bak.bin' on the box (which effectively
got me two equal, broken 256KB halves instead of one correct 512KB image).
Then I did 'flashrom -wv bak.bin' onto the other 512KB chip, which also
got the incorrect contents, _but_ flashrom said it verified fine (which is
actually true) because both the bak.bin _and_ the written contents are
crap.
I only noticed what was going on after lots of debugging. I finally did a
'dd if=/dev/urandom of=rnd.dd bs=1024c count=512', then 'flashrom -wv
rnd.dd' which then FAILED, because here the two 256KB-halves of the image
were _not_ the same as in the above case. Then I compared 'hexdump -Cv
rnd.dd' and 'flashrom -r readback.dd; hexdump -Cv readback.dd' outputs and
noticed that bytes 0x0..0x40000 (256 KB) were _not_ the same, but the
other 256 KB _were_ the same.
Anyway, this is a nice way for data loss, so we should fix it by throwing
an error in such cases.
--
Ticket URL: <http://tracker.coreboot.org/trac/coreboot/ticket/141>
coreboot <http://www.coreboot.org/>
More information about the coreboot
mailing list