Hi Markus,
On 24.09.2007 00:38, Carl-Daniel Hailfinger wrote:
On 31.08.2007 21:40, Markus Boas wrote:
I send a patch to add support for the EON EN29F002NT Write, read works.
Sorry, but the data sheet says you're only doing half of the identification and this will match all EON chips.
Can you test this patch? If identification fails, can you post the output of "flashrom --verbose" ? Thanks!
Add continuation ID support to jedec.c Add support for EON EN29F002AT.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-eon/flash.h =================================================================== --- flashrom-eon/flash.h (Revision 3012) +++ flashrom-eon/flash.h (Arbeitskopie) @@ -32,8 +32,12 @@
struct flashchip { const char *name; - int manufacture_id; - int model_id; + /* With 32bit manufacture_id and model_id we can cover IDs up to + * (including) the 4th bank of JEDEC JEP106W Standard Manufacturer's + * Identification code. + */ + uint32_t manufacture_id; + uint32_t model_id;
int total_size; int page_size; @@ -85,8 +89,14 @@ /* * EN25 chips are SPI, first byte of device ID is memory type, * second byte of device ID is log(bitsize)-9. + * Vendor and device ID of EN29 series are both prefixed with 0x7F, which + * is the continuation code for IDs in bank 2. + * Vendor ID of EN25 series is NOT prefixed with 0x7F, this results in + * a collision with Mitsubishi. Mitsubishi once manufactured flash chips. + * Let's hope they are not manufacturing SPI flash chips as well. */ -#define EON_ID 0x1C /* EON */ +#define EON_ID 0x7F1C /* EON, code is 1C in bank 2 */ +#define EON_ID_NOPREFIX 0x1C /* EON, code is 1C in bank 2 */ #define EN_25B05 0x2010 /* 2^19 kbit or 2^16 kByte */ #define EN_25B10 0x2011 #define EN_25B20 0x2012 @@ -94,6 +104,13 @@ #define EN_25B80 0x2014 #define EN_25B16 0x2015 #define EN_25B32 0x2016 +#define EN_29F512 0x7F21 +#define EN_29F010 0x7F20 +#define EN_29F040A 0x7F04 +#define EN_29LV010 0x7F6E +#define EN_29LV040A 0x7F4F /* EN_29LV040(A) */ +#define EN_29F002AT 0x7F92 +#define EN_29F002AB 0x7F97
#define FUJITSU_ID 0x04 /* Fujitsu */ #define MBM29F400TC 0x23 Index: flashrom-eon/en29f002a.c =================================================================== Index: flashrom-eon/jedec.c =================================================================== --- flashrom-eon/jedec.c (Revision 3012) +++ flashrom-eon/jedec.c (Arbeitskopie) @@ -4,6 +4,7 @@ * Copyright (C) 2000 Silicon Integrated System Corporation * Copyright (C) 2006 Giampiero Giancipoli gianci@email.it * Copyright (C) 2006 coresystems GmbH info@coresystems.de + * Copyright (C) 2007 Carl-Daniel Hailfinger * * 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 @@ -82,6 +83,7 @@ { volatile uint8_t *bios = flash->virtual_memory; uint8_t id1, id2; + uint32_t largeid1, largeid2;
/* Issue JEDEC Product ID Entry command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; @@ -98,7 +100,21 @@ /* Read product ID */ id1 = *(volatile uint8_t *)bios; id2 = *(volatile uint8_t *)(bios + 0x01); + largeid1 = id1; + largeid2 = id2;
+ /* Check if it is a continuation ID, this should be a while loop. */ + if (id1 == 0x7F) { + largeid1 <<= 8; + id1 = *(volatile uint8_t *)(bios + 0x100); + largeid1 |= id1; + } + if (id2 == 0x7F) { + largeid2 <<= 8; + id2 = *(volatile uint8_t *)(bios + 0x101); + largeid2 |= id2; + } + /* Issue JEDEC Product ID Exit command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; myusec_delay(10); @@ -107,8 +123,8 @@ *(volatile uint8_t *)(bios + 0x5555) = 0xF0; myusec_delay(40);
- printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); - if (id1 == flash->manufacture_id && id2 == flash->model_id) + printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, largeid1, largeid2); + if (largeid1 == flash->manufacture_id && largeid2 == flash->model_id) return 1;
return 0; Index: flashrom-eon/flashchips.c =================================================================== --- flashrom-eon/flashchips.c (Revision 3012) +++ flashrom-eon/flashchips.c (Arbeitskopie) @@ -42,6 +42,9 @@ probe_jedec, erase_chip_jedec, write_jedec}, {"At49F002(N)T",ATMEL_ID, AT_49F002NT, 256, 256, probe_jedec, erase_chip_jedec, write_jedec}, + /* The EN29F002AT can do byte program at arbitrary boundaries. */ + {"EN29F002AT", EON_ID, EN_29F002AT, 256, 256, + probe_jedec, erase_chip_jedec, write_jedec}, {"MBM29F400TC", FUJITSU_ID, MBM29F400TC, 512, 64 * 1024, probe_m29f400bt, erase_m29f400bt, write_linuxbios_m29f400bt}, {"MX29F002", MX_ID, MX_29F002, 256, 64 * 1024,