Author: hailfinger Date: 2009-05-06 15:59:44 +0200 (Wed, 06 May 2009) New Revision: 468
Modified: trunk/spi.c Log: 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.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Peter Stuge peter@stuge.se
Modified: trunk/spi.c =================================================================== --- trunk/spi.c 2009-05-06 13:51:44 UTC (rev 467) +++ trunk/spi.c 2009-05-06 13:59:44 UTC (rev 468) @@ -275,6 +275,15 @@ 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 @@ "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 @@ "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 @@ case 0x258d: spi_prettyprint_status_register_sst25vf040b(status); break; + case 0x258e: + spi_prettyprint_status_register_sst25(status); + break; } break; }