From 1bfd6c9524e630337ea2770b78be409b0338b6be Mon Sep 17 00:00:00 2001 From: Carl-Daniel Hailfinger Date: Wed, 6 May 2009 13:59:44 +0000 Subject: Improve SST25 status register routines - Using a 4-bit index into an array with 8 elements leads to out-of-bounds accesses. Use proper bit masking to fix this. - Factor out common SST25 status register printing. - Use the common SST25 status register printing for SST25VF080B. Corresponding to flashrom svn r468. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Peter Stuge --- spi.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'spi.c') diff --git a/spi.c b/spi.c index 036c836d1..0a7fd2ef4 100644 --- a/spi.c +++ b/spi.c @@ -275,6 +275,15 @@ void spi_prettyprint_status_register_st_m25p(uint8_t status) spi_prettyprint_status_register_common(status); } +void spi_prettyprint_status_register_sst25(uint8_t status) +{ + printf_debug("Chip status register: Block Protect Write Disable " + "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not "); + printf_debug("Chip status register: Auto Address Increment Programming " + "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not "); + spi_prettyprint_status_register_common(status); +} + /* Prettyprint the status register. Works for * SST 25VF016 */ @@ -289,11 +298,7 @@ void spi_prettyprint_status_register_sst25vf016(uint8_t status) "100000H-1FFFFFH", "all", "all" }; - printf_debug("Chip status register: Block Protect Write Disable " - "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not "); - printf_debug("Chip status register: Auto Address Increment Programming " - "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not "); - spi_prettyprint_status_register_common(status); + spi_prettyprint_status_register_sst25(status); printf_debug("Resulting block protection : %s\n", bpt[(status & 0x1c) >> 2]); } @@ -307,13 +312,9 @@ void spi_prettyprint_status_register_sst25vf040b(uint8_t status) "0x40000-0x7ffff", "all blocks", "all blocks", "all blocks", "all blocks" }; - printf_debug("Chip status register: Block Protect Write Disable " - "(BPL) is %sset\n", (status & (1 << 7)) ? "" : "not "); - printf_debug("Chip status register: Auto Address Increment Programming " - "(AAI) is %sset\n", (status & (1 << 6)) ? "" : "not "); - spi_prettyprint_status_register_common(status); + spi_prettyprint_status_register_sst25(status); printf_debug("Resulting block protection : %s\n", - bpt[(status & 0x3c) >> 2]); + bpt[(status & 0x1c) >> 2]); } void spi_prettyprint_status_register(struct flashchip *flash) @@ -341,6 +342,9 @@ void spi_prettyprint_status_register(struct flashchip *flash) case 0x258d: spi_prettyprint_status_register_sst25vf040b(status); break; + case 0x258e: + spi_prettyprint_status_register_sst25(status); + break; } break; } -- cgit v1.2.3