On 19.01.2010 11:48, Stefan Reinauer wrote:
On 1/19/10 4:01 AM, Carl-Daniel Hailfinger wrote:
Dediprog SF100 support.
MacPro:flashrom stepan$ ./flashrom -p dediprog flashrom v0.9.1-r869 Calibrating delay loop... OK. Found chip "ST M25P32" (4096 KB, SPI) at physical address 0xffc00000. No operations were specified.
Nice.
Aside from the physical address making not much sense (for any non-direct programmer)
Indeed. We can tackle this later.
MacPro:flashrom stepan$ ./flashrom -p dediprog -r testimage.rom flashrom v0.9.1-r869 Calibrating delay loop... OK. Found chip "ST M25P32" (4096 KB, SPI) at physical address 0xffc00000. Reading flash... ^C
The reading does not seem to work yet, even after several minutes, the image is still zero bytes.
Hm. To be honest, reading is something I could not find in the logs. Then again, maybe some diagnostics in SPEW mode could help. Please run
flashrom -p dediprog -VV -r testimage.rom
with the following debug patch (you need to run "make distclean" before compiling it)
Mark 4 byte RDID as supported by Dediprog. Really abort if any unhandled command sizes are run. Add some debugging at SPEW level.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-dediprog_fixups_debug/spi.c =================================================================== --- flashrom-dediprog_fixups_debug/spi.c (Revision 870) +++ flashrom-dediprog_fixups_debug/spi.c (Arbeitskopie) @@ -335,6 +335,9 @@ #if BUSPIRATE_SPI_SUPPORT == 1 case SPI_CONTROLLER_BUSPIRATE: #endif +#if DEDIPROG_SUPPORT == 1 + case SPI_CONTROLLER_DEDIPROG: +#endif return probe_spi_rdid_generic(flash, 4); default: printf_debug("4b ID not supported on this SPI controller\n"); Index: flashrom-dediprog_fixups_debug/dediprog.c =================================================================== --- flashrom-dediprog_fixups_debug/dediprog.c (Revision 870) +++ flashrom-dediprog_fixups_debug/dediprog.c (Arbeitskopie) @@ -145,6 +145,7 @@
int dediprog_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len) { + msg_pspew("%s, start=0x%x, len=0x%x\n", __func__, start, len); /* Maximum read length is 4 bytes for now. */ return spi_read_chunked(flash, buf, start, len, 4); } @@ -154,14 +155,21 @@ { int ret;
+ msg_pspew("%s, writecnt=%i, readcnt=%i\n", __func__, writecnt, readcnt); /* Paranoid, but I don't want to be blamed if anything explodes. */ - if ((writecnt != 1) && (writecnt != 4)) + if ((writecnt != 1) && (writecnt != 4)) { msg_perr("Untested writecnt=%i, aborting.\n", writecnt); - if (readcnt > 4) + return 1; + } + if (readcnt > 4) { msg_perr("Untested readcnt=%i, aborting.\n", readcnt); - if ((readcnt == 0) && (writecnt != 1)) + return 1; + } + if ((readcnt == 0) && (writecnt != 1)) { msg_perr("Untested writecnt=%i, readcnt=%i combination, " "aborting.\n", writecnt, readcnt); + return 1; + } ret = usb_control_msg(dediprog_handle, 0x42, 0x1, 0xff, readcnt ? 0x1 : 0x0, (char *)writearr, writecnt, DEFAULT_TIMEOUT); if (ret != writecnt) {