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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> * Copyright (C) 2006 coresystems GmbH <[EMAIL PROTECTED]> + * 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, -- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios