flashrom: Display test status in -L chip listing
authorPeter Stuge <peter@stuge.se>
Sat, 6 Dec 2008 01:37:09 +0000 (01:37 +0000)
committerPeter Stuge <peter@stuge.se>
Sat, 6 Dec 2008 01:37:09 +0000 (01:37 +0000)
Looks like this:

Supported flash chips:          Tested OK operations:   Known BAD operations:

AMD Am29F002(N)BB
AMD Am29F002(N)BT               PROBE READ ERASE WRITE
AMD Am29F016D
AMD Am29F040B                   PROBE READ ERASE WRITE
AMD Am29LV040B
Atmel AT45CS1282                                        READ

Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3803 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/flashrom/flashrom.c

index de3fab53cfa4a17e8663373febdaabf082695d18..623ce7f05db7d005eead1a95c252054e54ea2839 100644 (file)
@@ -205,14 +205,61 @@ int verify_flash(struct flashchip *flash, uint8_t *buf)
        return 0;
 }
 
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define POS_PRINT(x) do { pos += strlen(x); printf(x); } while (0)
+
 void print_supported_chips(void)
 {
-       int i;
+       int okcol = 0, pos = 0;
+       struct flashchip *f;
 
-       printf("Supported ROM chips:\n\n");
+       for (f = flashchips; f->name != NULL; f++) {
+               if (GENERIC_DEVICE_ID == f->model_id)
+                       continue;
+               okcol = MAX(okcol, strlen(f->vendor) + 1 + strlen(f->name));
+       }
+       okcol = (okcol + 7) & ~7;
 
-       for (i = 0; flashchips[i].name != NULL; i++)
-               printf("%s %s\n", flashchips[i].vendor, flashchips[i].name);
+       POS_PRINT("Supported flash chips:");
+       while (pos < okcol) {
+               printf("\t");
+               pos += 8 - (pos % 8);
+       }
+       printf("Tested OK operations:\tKnown BAD operations:\n\n");
+
+       for (f = flashchips; f->name != NULL; f++) {
+               printf("%s %s", f->vendor, f->name);
+               pos = strlen(f->vendor) + 1 + strlen(f->name);
+               while (pos < okcol) {
+                       printf("\t");
+                       pos += 8 - (pos % 8);
+               }
+               if ((f->tested & TEST_OK_MASK)) {
+                       if ((f->tested & TEST_OK_PROBE))
+                               POS_PRINT("PROBE ");
+                       if ((f->tested & TEST_OK_READ))
+                               POS_PRINT("READ ");
+                       if ((f->tested & TEST_OK_ERASE))
+                               POS_PRINT("ERASE ");
+                       if ((f->tested & TEST_OK_WRITE))
+                               POS_PRINT("WRITE");
+               }
+               while (pos < okcol + 24) {
+                       printf("\t");
+                       pos += 8 - (pos % 8);
+               }
+               if ((f->tested & TEST_BAD_MASK)) {
+                       if ((f->tested & TEST_BAD_PROBE))
+                               printf("PROBE ");
+                       if ((f->tested & TEST_BAD_READ))
+                               printf("READ ");
+                       if ((f->tested & TEST_BAD_ERASE))
+                               printf("ERASE ");
+                       if ((f->tested & TEST_BAD_WRITE))
+                               printf("WRITE");
+               }
+               printf("\n");
+       }
 }
 
 void usage(const char *name)