summaryrefslogtreecommitdiff
path: root/spi25_statusreg.c
diff options
context:
space:
mode:
authorstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2013-06-28 21:28:27 +0000
committerstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2013-06-28 21:28:27 +0000
commitc7ac169b8ae97f58b87a721e94c447d3aab43931 (patch)
treef0520da2262238adda4fb28a94fda700722c5bf4 /spi25_statusreg.c
parent4aec1ce53fa7643f812fcef92483480a8a8a0562 (diff)
downloadflashrom-c7ac169b8ae97f58b87a721e94c447d3aab43931.tar.gz
Introduce additional SPI status register helpers.
- spi_prettyprint_status_register_default_welwip(): It just prettyprints the plain hex value and the welwip bits. - spi_prettyprint_status_register_default_bp4(): Prints the hex value, welwip, bp0-5 and srwd bits. - spi_disable_blockprotect_bp2_srwd(), - spi_disable_blockprotect_bp3_srwd() and spi_disable_blockprotect_bp4_srwd(): Three new common block unprotection functions for the frequent cases where there is a status register lock bit at bit #7 and some block protection bits at bits #2-#4, #2-#5 and #2-#6 respectively. Signed-off-by: Stefan Tauner <stefan.tauner@student.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@student.tuwien.ac.at> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1681 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'spi25_statusreg.c')
-rw-r--r--spi25_statusreg.c49
1 files changed, 43 insertions, 6 deletions
diff --git a/spi25_statusreg.c b/spi25_statusreg.c
index a6a4607..e0ed690 100644
--- a/spi25_statusreg.c
+++ b/spi25_statusreg.c
@@ -196,6 +196,27 @@ int spi_disable_blockprotect(struct flashctx *flash)
return spi_disable_blockprotect_generic(flash, 0x3C, 0, 0, 0xFF);
}
+/* A common block protection disable that tries to unset the status register bits masked by 0x1C (BP0-2) and
+ * protected/locked by bit #7. Useful when bit #5 is neither a protection bit nor reserved (and hence possibly
+ * non-0). */
+int spi_disable_blockprotect_bp2_srwd(struct flashctx *flash)
+{
+ return spi_disable_blockprotect_generic(flash, 0x1C, 1 << 7, 0, 0xFF);
+}
+
+/* A common block protection disable that tries to unset the status register bits masked by 0x3C (BP0-3) and
+ * protected/locked by bit #7. */
+int spi_disable_blockprotect_bp3_srwd(struct flashctx *flash)
+{
+ return spi_disable_blockprotect_generic(flash, 0x3C, 1 << 7, 0, 0xFF);
+}
+
+/* A common block protection disable that tries to unset the status register bits masked by 0x7C (BP0-4) and
+ * protected/locked by bit #7. */
+int spi_disable_blockprotect_bp4_srwd(struct flashctx *flash)
+{
+ return spi_disable_blockprotect_generic(flash, 0x7C, 1 << 7, 0, 0xFF);
+}
static void spi_prettyprint_status_register_hex(uint8_t status)
{
@@ -261,6 +282,16 @@ int spi_prettyprint_status_register_plain(struct flashctx *flash)
return 0;
}
+/* Print the plain hex value and the welwip bits only. */
+int spi_prettyprint_status_register_default_welwip(struct flashctx *flash)
+{
+ uint8_t status = spi_read_status_register(flash);
+ spi_prettyprint_status_register_hex(status);
+
+ spi_prettyprint_status_register_welwip(status);
+ return 0;
+}
+
/* Works for many chips of the
* AMIC A25L series
* and MX MX25L512
@@ -312,6 +343,17 @@ int spi_prettyprint_status_register_default_bp3(struct flashctx *flash)
return 0;
}
+int spi_prettyprint_status_register_default_bp4(struct flashctx *flash)
+{
+ uint8_t status = spi_read_status_register(flash);
+ spi_prettyprint_status_register_hex(status);
+
+ spi_prettyprint_status_register_srwd(status);
+ spi_prettyprint_status_register_bp(status, 4);
+ spi_prettyprint_status_register_welwip(status);
+ return 0;
+}
+
/* === Amic ===
* FIXME: spi_disable_blockprotect is incorrect but works fine for chips using
* spi_prettyprint_status_register_default_bp1 or
@@ -539,11 +581,6 @@ int spi_disable_blockprotect_at25f512b(struct flashctx *flash)
return spi_disable_blockprotect_generic(flash, 0x04, 1 << 7, 1 << 4, 0xFF);
}
-int spi_disable_blockprotect_at25f4096(struct flashctx *flash)
-{
- return spi_disable_blockprotect_generic(flash, 0x1C, 1 << 7, 0, 0xFF);
-}
-
int spi_disable_blockprotect_at25fs010(struct flashctx *flash)
{
return spi_disable_blockprotect_generic(flash, 0x6C, 1 << 7, 0, 0xFF);
@@ -559,7 +596,7 @@ int spi_disable_blockprotect_at25fs040(struct flashctx *flash)
/* TODO: Clear P_FAIL and E_FAIL with Clear SR Fail Flags Command (30h) here? */
int spi_disable_blockprotect_s33(struct flashctx *flash)
{
- return spi_disable_blockprotect_generic(flash, 0x1C, 1 << 7, 0, 0xFF);
+ return spi_disable_blockprotect_bp2_srwd(flash);
}
int spi_prettyprint_status_register_s33(struct flashctx *flash)