[flashrom] [commit] r1420 - trunk

repository service svn at flashrom.org
Fri Aug 26 00:44:11 CEST 2011


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 at gmail.com> on a PowerPC box.

Signed-off-by: Mattias Mattsson <vitplister at gmail.com>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Acked-by: Uwe Hermann <uwe at 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,




More information about the flashrom mailing list