The currently unreferenced function in sharplhf00l04.c does a standard FWH block protection reset (writes 0 to the protection register) and a standard FWH block erase.
The locking blocks of the FWH block lock cover 128KB areas, and thats the only thing page_size is used for in the functions referenced in the LHF00L04 entry.
Finally, this adds a comment that there are non-volatile (flash memory) lock bits for 8 sectors in the last 64KB. They are write-only and clearable at once. Readback seems unsupported.
Signed-off-by: Michael Karcher flashrom@mkarcher.dialup.fu-berlin.de --- Makefile | 2 +- flashchips.c | 5 ++- sharplhf00l04.c | 58 ------------------------------------------------------- 3 files changed, 4 insertions(+), 61 deletions(-) delete mode 100644 sharplhf00l04.c
diff --git a/Makefile b/Makefile index 6e6e2de..470d944 100644 --- a/Makefile +++ b/Makefile @@ -119,7 +119,7 @@ endif
CHIP_OBJS = jedec.o stm50flw0x0x.o w39.o w29ee011.o \ sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \ - sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o sharplhf00l04.o \ + sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o \ a25.o at25.o
LIB_OBJS = layout.o diff --git a/flashchips.c b/flashchips.c index 865ba2f..4514985 100644 --- a/flashchips.c +++ b/flashchips.c @@ -5151,7 +5151,7 @@ const struct flashchip flashchips[] = { .manufacture_id = SHARP_ID, .model_id = SHARP_LHF00L04, .total_size = 1024, - .page_size = 64 * 1024, + .page_size = 128 * 1024, .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP, .tested = TEST_UNTESTED, .probe = probe_82802ab, @@ -5171,7 +5171,8 @@ const struct flashchip flashchips[] = { .block_erase = NULL, /* 30 D0, only in A/A mux mode */ }, }, - .unlock = unlock_82802ab, + .unlock = unlock_82802ab, /* additionally, there are write-only non-volatile + boot block protection bits per 8K sector*/ .write = write_82802ab, .read = read_memmapped, .voltage = {3000, 3600}, diff --git a/sharplhf00l04.c b/sharplhf00l04.c deleted file mode 100644 index f21950a..0000000 --- a/sharplhf00l04.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of the flashrom project. - * - * Copyright (C) 2000 Silicon Integrated System Corporation - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "flash.h" -#include "chipdrivers.h" - -/* FIXME: The datasheet is unclear whether we should use toggle_ready_jedec - * or wait_82802ab. - * FIXME: This file is unused. - */ - -int erase_lhf00l04_block(struct flashchip *flash, unsigned int blockaddr, unsigned int blocklen) -{ - chipaddr bios = flash->virtual_memory + blockaddr; - chipaddr wrprotect = flash->virtual_registers + blockaddr + 2; - uint8_t status; - - // clear status register - chip_writeb(0x50, bios); - status = wait_82802ab(flash); - print_status_82802ab(status); - // clear write protect - msg_cspew("write protect is at 0x%lx\n", (wrprotect)); - msg_cspew("write protect is 0x%x\n", chip_readb(wrprotect)); - chip_writeb(0, wrprotect); - msg_cspew("write protect is 0x%x\n", chip_readb(wrprotect)); - - // now start it - chip_writeb(0x20, bios); - chip_writeb(0xd0, bios); - programmer_delay(10); - // now let's see what the register is - status = wait_82802ab(flash); - print_status_82802ab(status); - - if (check_erased_range(flash, blockaddr, blocklen)) { - msg_cerr("ERASE FAILED!\n"); - return -1; - } - return 0; -}