summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/chipdrivers.h1
-rw-r--r--spi25.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/include/chipdrivers.h b/include/chipdrivers.h
index 2ef7f183c..61d43c9fa 100644
--- a/include/chipdrivers.h
+++ b/include/chipdrivers.h
@@ -53,6 +53,7 @@ int spi_block_erase_d8(struct flashctx *flash, unsigned int addr, unsigned int b
int spi_block_erase_db(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
int spi_block_erase_dc(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
erasefunc_t *spi_get_erasefn_from_opcode(uint8_t opcode);
+uint8_t spi_get_opcode_from_erasefn(erasefunc_t *func);
int spi_chip_write_1(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
int spi_nbyte_read(struct flashctx *flash, unsigned int addr, uint8_t *bytes, unsigned int len);
int spi_read_chunked(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len, unsigned int chunksize);
diff --git a/spi25.c b/spi25.c
index acd13b33f..445410630 100644
--- a/spi25.c
+++ b/spi25.c
@@ -651,6 +651,18 @@ erasefunc_t *spi_get_erasefn_from_opcode(uint8_t opcode)
return NULL;
}
+uint8_t spi_get_opcode_from_erasefn(erasefunc_t *func)
+{
+ size_t i;
+ for (i = 0; i < ARRAY_SIZE(function_opcode_list); i++) {
+ if (function_opcode_list[i].func == func)
+ return function_opcode_list[i].opcode;
+ }
+ msg_cinfo("%s: unknown erase function (0x%p). Please report "
+ "this at flashrom@flashrom.org\n", __func__, func);
+ return 0x00; //Assuming 0x00 is not a erase function opcode
+}
+
static int spi_nbyte_program(struct flashctx *flash, unsigned int addr, const uint8_t *bytes, unsigned int len)
{
const bool native_4ba = flash->chip->feature_bits & FEATURE_4BA_WRITE && spi_master_4ba(flash);