summaryrefslogtreecommitdiff
path: root/stm50.c
diff options
context:
space:
mode:
authorstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2014-08-03 13:05:34 +0000
committerstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2014-08-03 13:05:34 +0000
commitc8f9a06f6ca4171e137f35de5734be32eacf1f51 (patch)
treee5fec0cda5a546133a7440f65da442329ec3db48 /stm50.c
parentd7010dd365a5455d111638fd5f359f5537608325 (diff)
downloadflashrom-c8f9a06f6ca4171e137f35de5734be32eacf1f51.tar.gz
Refactor unlocking of many chips with locking at register space address +2.
This includes PMC Pm49*, SST 49LF00*, ST M50* and Winbond W39* families. The erase and write test status bits of all affected chips have been reset. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1833 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'stm50.c')
-rw-r--r--stm50.c55
1 files changed, 0 insertions, 55 deletions
diff --git a/stm50.c b/stm50.c
index edcfdd2..1ae2bc4 100644
--- a/stm50.c
+++ b/stm50.c
@@ -27,63 +27,8 @@
*/
#include "flash.h"
-#include "flashchips.h"
#include "chipdrivers.h"
-static int stm50_unlock_address(struct flashctx *flash, int offset)
-{
- chipaddr wrprotect = flash->virtual_registers + 2;
- static const uint8_t unlock_sector = 0x00;
- msg_cdbg("unlocking at 0x%x\n", offset);
- chip_writeb(flash, unlock_sector, wrprotect + offset);
- if (chip_readb(flash, wrprotect + offset) != unlock_sector) {
- msg_cerr("Cannot unlock address 0x%x\n", offset);
- return -1;
- }
- return 0;
-}
-
-/* Chips known to use a non-uniform block and sector layout for locking (as well as for erasing):
- * Name Size Address range of lock registers
- * M50FLW080A 1MB FFB00002 - FFBFF002
- * M50FLW080B 1MB FFB00002 - FFBFF002
- * M50FW002 256k FFBC0002 - FFBFC002
- * M50LPW116 2MB FFA00002 - FFBFC002
- */
-int unlock_stm50_nonuniform(struct flashctx *flash)
-{
- int i;
- struct eraseblock *eraseblocks = flash->chip->block_erasers[0].eraseblocks;
- unsigned int done = 0;
- for (i = 0; i < NUM_ERASEREGIONS && eraseblocks[i].count != 0; i++) {
- unsigned int block_size = eraseblocks[i].size;
- unsigned int block_count = eraseblocks[i].count;
-
- int j;
- for (j = 0; j < block_count; j++) {
- if (stm50_unlock_address(flash, done)) {
- msg_cerr("UNLOCK FAILED!\n");
- return -1;
- }
- done += block_count * block_size;
- }
- }
- return 0;
-}
-
-/* Unlocking for uniform 64 kB blocks starting at offset 2 of the feature registers. */
-int unlock_stm50_uniform(struct flashctx *flash)
-{
- int i;
- for (i = 0; i < flash->chip->total_size * 1024; i+= 64 * 1024) {
- if (stm50_unlock_address(flash, i)) {
- msg_cerr("UNLOCK FAILED!\n");
- return -1;
- }
- }
- return 0;
-}
-
static int stm50_erase_sector(struct flashctx *flash, unsigned int addr)
{
chipaddr bios = flash->virtual_memory + addr;