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 <[email protected]> on a PowerPC box.

Signed-off-by: Mattias Mattsson <[email protected]>
Acked-by: Carl-Daniel Hailfinger <[email protected]>
Acked-by: Uwe Hermann <[email protected]>

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,

_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to