[LinuxBIOS] [PATCH] flashrom: Support EON EN29F002AT, JEDEC continuation IDs
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Tue Dec 18 00:53:37 CET 2007
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 at 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 at email.it>
* Copyright (C) 2006 coresystems GmbH <info at 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,
More information about the coreboot
mailing list