Author: uwe Date: Fri Aug 26 00:44:11 2011 New Revision: 1420 URL: http://flashrom.org/trac/flashrom/changeset/1420
Log: Add support for the Sharp LH28F008BJT-BTLZ1 chip.
Tested by Mattias Mattsson vitplister@gmail.com on a PowerPC box.
Signed-off-by: Mattias Mattsson vitplister@gmail.com Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Uwe Hermann uwe@hermann-uwe.de
Modified: trunk/82802ab.c trunk/chipdrivers.h trunk/flashchips.c
Modified: trunk/82802ab.c ============================================================================== --- trunk/82802ab.c Thu Aug 25 16:06:50 2011 (r1419) +++ trunk/82802ab.c Fri Aug 26 00:44:11 2011 (r1420) @@ -208,3 +208,58 @@
return 0; } + +int unlock_lh28f008bjt(struct flashchip *flash) +{ + chipaddr bios = flash->virtual_memory; + uint8_t mcfg, bcfg; + uint8_t need_unlock = 0, can_unlock = 0; + int i; + + /* Wait if chip is busy */ + wait_82802ab(flash); + + /* Read identifier codes */ + chip_writeb(0x90, bios); + + /* Read master lock-bit */ + mcfg = chip_readb(bios + 0x3); + msg_cdbg("master lock is "); + if (mcfg) { + msg_cdbg("locked!\n"); + } else { + msg_cdbg("unlocked!\n"); + can_unlock = 1; + } + + /* Read block lock-bits, 8 * 8 KB + 15 * 64 KB */ + for (i = 0; i < flash->total_size * 1024; + i += (i >= (64 * 1024) ? 64 * 1024 : 8 * 1024)) { + bcfg = chip_readb(bios + i + 2); /* read block lock config */ + msg_cdbg("block lock at %06x is %slocked!\n", i, + bcfg ? "" : "un"); + if (bcfg) + need_unlock = 1; + } + + /* Reset chip */ + chip_writeb(0xFF, bios); + + /* Unlock: clear block lock-bits, if needed */ + if (can_unlock && need_unlock) { + msg_cdbg("Unlock: "); + chip_writeb(0x60, bios); + chip_writeb(0xD0, bios); + chip_writeb(0xFF, bios); + wait_82802ab(flash); + msg_cdbg("Done!\n"); + } + + /* Error: master locked or a block is locked */ + if (!can_unlock && need_unlock) { + msg_cerr("At least one block is locked and lockdown is active!\n"); + return -1; + } + + return 0; +}
Modified: trunk/chipdrivers.h ============================================================================== --- trunk/chipdrivers.h Thu Aug 25 16:06:50 2011 (r1419) +++ trunk/chipdrivers.h Fri Aug 26 00:44:11 2011 (r1420) @@ -85,6 +85,7 @@ void print_status_82802ab(uint8_t status); int unlock_82802ab(struct flashchip *flash); int unlock_28f004s5(struct flashchip *flash); +int unlock_lh28f008bjt(struct flashchip *flash);
/* jedec.c */ uint8_t oddparity(uint8_t val);
Modified: trunk/flashchips.c ============================================================================== --- trunk/flashchips.c Thu Aug 25 16:06:50 2011 (r1419) +++ trunk/flashchips.c Fri Aug 26 00:44:11 2011 (r1420) @@ -5379,6 +5379,36 @@
{ .vendor = "Sharp", + .name = "LH28F008BJT-BTLZ1", + .bustype = BUS_PARALLEL, + .manufacture_id = SHARP_ID, + .model_id = SHARP_LH28F008BJxxPB, + .total_size = 1024, + .page_size = 64 * 1024, + .tested = TEST_OK_PREW, + .probe = probe_82802ab, + .probe_timing = TIMING_ZERO, + .block_erasers = + { + { + .eraseblocks = { + {8 * 1024, 8}, + {64 * 1024, 15} + }, + .block_erase = erase_block_82802ab, + }, { + .eraseblocks = { {1024 * 1024, 1} }, + .block_erase = erase_sector_49lfxxxc, + } + }, + .unlock = unlock_lh28f008bjt, + .write = write_82802ab, + .read = read_memmapped, + .voltage = {2700, 3600}, + }, + + { + .vendor = "Sharp", .name = "LHF00L04", .bustype = BUS_FWH, /* A/A Mux */ .manufacture_id = SHARP_ID,