Author: stefanct Date: Sat Apr 26 18:12:55 2014 New Revision: 1779 URL: http://flashrom.org/trac/flashrom/changeset/1779
Log: CID1130000: Unchecked return value in default_spi_write_aai().
Also, try to always disable WRDI because else the user is stuck with a chip in AAI mode that won't return by itself w/o a reset.
Signed-off-by: Stefan Reinauer stefan.reinauer@coreboot.org Signed-off-by: Stefan Tauner stefan.tauner@alumni.tuwien.ac.at Acked-by: Stefan Tauner stefan.tauner@alumni.tuwien.ac.at
Modified: trunk/spi25.c
Modified: trunk/spi25.c ============================================================================== --- trunk/spi25.c Sat Apr 26 18:12:45 2014 (r1778) +++ trunk/spi25.c Sat Apr 26 18:12:55 2014 (r1779) @@ -1128,13 +1128,9 @@
result = spi_send_multicommand(flash, cmds); - if (result) { - msg_cerr("%s failed during start command execution\n", - __func__); - /* FIXME: Should we send WRDI here as well to make sure the chip - * is not in AAI mode? - */ - return result; + if (result != 0) { + msg_cerr("%s failed during start command execution: %d\n", __func__, result); + goto bailout; } while (spi_read_status_register(flash) & SPI_SR_WIP) programmer_delay(10); @@ -1146,8 +1142,11 @@ while (pos < start + len - 1) { cmd[1] = buf[pos++ - start]; cmd[2] = buf[pos++ - start]; - spi_send_command(flash, JEDEC_AAI_WORD_PROGRAM_CONT_OUTSIZE, 0, - cmd, NULL); + result = spi_send_command(flash, JEDEC_AAI_WORD_PROGRAM_CONT_OUTSIZE, 0, cmd, NULL); + if (result != 0) { + msg_cerr("%s failed during followup AAI command execution: %d\n", __func__, result); + goto bailout; + } while (spi_read_status_register(flash) & SPI_SR_WIP) programmer_delay(10); } @@ -1165,4 +1164,8 @@ }
return 0; + +bailout: + spi_write_disable(flash); + return SPI_GENERIC_ERROR; }