[flashrom] [PATCH] Annotate evil twins
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Thu Jul 22 14:54:47 CEST 2010
Evil twins are chips with identical IDs and different/incompatible
characteristics (e.g. eraseblock layout, write strategy or size).
Annotate them so flashrom can tell the user that it's not a matter of
simply picking one of the chips in a list of multiple chips found.
This patch only touches the AMIC A25L40PT and A25L40PU.
I'm fairly sure there are more evil twins, but those two were touched
recently.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Index: flashrom-evil_twin/flash.h
===================================================================
--- flashrom-evil_twin/flash.h (Revision 1096)
+++ flashrom-evil_twin/flash.h (Arbeitskopie)
@@ -180,6 +180,14 @@
#define FEATURE_ADDR_2AA (1 << 2)
#define FEATURE_ADDR_AAA (2 << 2)
#define FEATURE_ADDR_SHIFTED (1 << 5)
+/* Evil twins are chips with the same ID and different erase/write
+ * characteristics. The second macro discards its arguments for now and allows
+ * human readable annotation while at the same time providing a zero cost
+ * simplified machine readable annotation. The first macro is there to check
+ * quickly if the chip has any evil twins.
+ */
+#define FEATURE_EVIL_TWIN (1 << 6)
+#define FEATURE_EVIL_TWIN_OF(a,b) (1 << 6)
struct flashchip {
const char *vendor;
Index: flashrom-evil_twin/flashchips.c
===================================================================
--- flashrom-evil_twin/flashchips.c (Revision 1096)
+++ flashrom-evil_twin/flashchips.c (Arbeitskopie)
@@ -1372,6 +1372,7 @@
.model_id = AMIC_A25L40PT,
.total_size = 512,
.page_size = 256,
+ .feature_bits = FEATURE_EVIL_TWIN_OF("AMIC", "A25L40PU"),
.tested = TEST_OK_PRW,
.probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
@@ -1404,6 +1405,7 @@
.model_id = AMIC_A25L40PU,
.total_size = 512,
.page_size = 256,
+ .feature_bits = FEATURE_EVIL_TWIN_OF("AMIC", "A25L40PT"),
.tested = TEST_OK_PRW,
.probe = probe_spi_rdid4,
.probe_timing = TIMING_ZERO,
Index: flashrom-evil_twin/cli_classic.c
===================================================================
--- flashrom-evil_twin/cli_classic.c (Revision 1096)
+++ flashrom-evil_twin/cli_classic.c (Arbeitskopie)
@@ -399,7 +399,8 @@
if (flashes[1]) {
printf("Multiple flash chips were detected:");
for (i = 0; i < ARRAY_SIZE(flashes) && flashes[i]; i++)
- printf(" %s", flashes[i]->name);
+ printf("%s %s%s", i ? "," : "", flashes[i]->name,
+ flashes[i]->feature_bits & FEATURE_EVIL_TWIN ? " (evil twin)" : "");
printf("\nPlease specify which chip to use with the -c <chipname> option.\n");
programmer_shutdown();
exit(1);
--
http://www.hailfinger.org/
More information about the flashrom
mailing list