summaryrefslogtreecommitdiffstats
path: root/flashchips.c
diff options
context:
space:
mode:
authorStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2013-06-20 22:55:41 +0000
committerStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2013-06-20 22:55:41 +0000
commitcecb2c56d07ac45cde56cadc6416e653b0cfafb7 (patch)
tree81788790601ca10fea904cef17f4694134ecbc3d /flashchips.c
parent0466c819e248881e03a6ec98db5297565816859b (diff)
downloadast2050-flashrom-cecb2c56d07ac45cde56cadc6416e653b0cfafb7.zip
ast2050-flashrom-cecb2c56d07ac45cde56cadc6416e653b0cfafb7.tar.gz
Fix unlocking function for most Atmel AT2[56]D* chips
I broke unlocking them correctly in r1635 while refactoring (NB: the commit log including the overly selfconfident statement about the "bug in spi_disable_blockprotect_at25df()"). Affected chips have per sector protection bits and the write protection bits in the status register do indicate if none, some or all sectors are protected. It is possible to globally (un)lock all sectors at once but in a way that was not anticipated when refactoring the spi25 unlocking functions into spi_disable_blockprotect_generic(). To globally unprotect not only the protection bits (2 and 3) have 0 to be written to them but also bits 4 and 5 which normally would not be touched by spi_disable_blockprotect_generic(). Some of the chips also support a permanent lockdown with fuses which we do not handle yet. To fix this without copying the whole method I introduce another mask parameter to spi_disable_blockprotect_generic() namely unprotect_mask. See verbose comments inline for details. Also, prettyprint the status register after trying to disable the block protection fails. Corresponding to flashrom svn r1679. Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Tested-by: Chi Zhang <zhangchi866@gmail.com> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Diffstat (limited to 'flashchips.c')
-rw-r--r--flashchips.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/flashchips.c b/flashchips.c
index 6ec3749..d188617 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -1353,7 +1353,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df,
- .unlock = spi_disable_blockprotect_at25df,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
@@ -1391,7 +1391,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df,
- .unlock = spi_disable_blockprotect_at25df,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
@@ -1429,7 +1429,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df,
- .unlock = spi_disable_blockprotect_at25df,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {1600, 2000}, /* Datasheet says range is 1.65-1.95 V */
@@ -1467,7 +1467,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df_sec,
- .unlock = spi_disable_blockprotect_at25df_sec,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -1505,7 +1505,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df_sec,
- .unlock = spi_disable_blockprotect_at25df_sec,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -1543,7 +1543,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df,
- .unlock = spi_disable_blockprotect_at25df,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -1582,7 +1582,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df_sec,
- .unlock = spi_disable_blockprotect_at25df_sec,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -1620,7 +1620,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df_sec,
- .unlock = spi_disable_blockprotect_at25df_sec,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -1659,7 +1659,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df_sec,
- .unlock = spi_disable_blockprotect_at25df_sec,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect_sec,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -1959,7 +1959,7 @@ const struct flashchip flashchips[] = {
.block_erase = spi_block_erase_20,
}
},
- .printlock = spi_prettyprint_status_register_plain, /* TODO: improve */
+ .printlock = spi_prettyprint_status_register_plain,
/* Supports also an incompatible page write (of exactly 256 B) and an auto-erasing write. */
.write = spi_chip_write_1,
.read = spi_chip_read, /* Fast read (0x0B) supported */
@@ -1998,7 +1998,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at26df081a,
- .unlock = spi_disable_blockprotect_at25df,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -2036,7 +2036,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at25df,
- .unlock = spi_disable_blockprotect,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
@@ -2051,7 +2051,7 @@ const struct flashchip flashchips[] = {
.total_size = 2048,
.page_size = 256,
.feature_bits = FEATURE_WRSR_WREN,
- .tested = TEST_UNTESTED,
+ .tested = TEST_OK_PREW,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
@@ -2074,7 +2074,7 @@ const struct flashchip flashchips[] = {
}
},
.printlock = spi_prettyprint_status_register_at26df081a,
- .unlock = spi_disable_blockprotect,
+ .unlock = spi_disable_blockprotect_at2x_global_unprotect,
.write = spi_chip_write_256,
.read = spi_chip_read,
.voltage = {2700, 3600},
OpenPOWER on IntegriCloud