FreeCalypso > hg > freecalypso-tools
annotate loadtools/flashid.c @ 594:2c75cf810146
fc-fsio: cleandir command implemented
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Tue, 04 Feb 2020 05:09:13 +0000 | 
| parents | f229efbfd581 | 
| children | 54a0bc149d9c | 
| rev | line source | 
|---|---|
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * Flash device detection code lives here | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 #include <sys/types.h> | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <stdio.h> | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 #include <stdint.h> | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <stdlib.h> | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include "flash.h" | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 extern struct flash_device flashdev_28F160C3T; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 extern struct flash_device flashdev_28F320C3T; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 extern struct flash_device flashdev_28F640C3T; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 extern struct flash_device flashdev_28F640C3B; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 extern struct flash_device flashdev_28F640W30T; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 extern struct flash_device flashdev_28F640W30B; | 
| 553 
3886a8a40809
fc-loadtool: added support for old Am29DL640G flash chip
 Mychaela Falconia <falcon@freecalypso.org> parents: 
523diff
changeset | 17 extern struct flash_device flashdev_Am29DL640G; | 
| 559 
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
 Mychaela Falconia <falcon@freecalypso.org> parents: 
553diff
changeset | 18 extern struct flash_device flashdev_PL032J; | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 extern struct flash_device flashdev_PL129J; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 extern struct flash_device flashdev_PL129N; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 extern struct flash_device flashdev_K5A32xx_T; | 
| 523 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 22 extern struct flash_device flashdev_K5L33xx_A; | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 extern int flash_global_config; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 extern struct flash_bank_info flash_bank_info[2]; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 static | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 run_cfi_check(bi, table) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 struct flash_bank_info *bi; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 struct cfi_check *table; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 struct cfi_check *tp; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 uint16_t rdword; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 for (tp = table; tp->offset >= 0; tp++) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 if (do_r16(bi->base_addr + (tp->offset << 1), &rdword) < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 if (rdword != tp->expect_val) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 return(0); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 return(1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 static | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 try_device(bi, dev) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 struct flash_bank_info *bi; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 struct flash_device *dev; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 int rc; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 printf("Appears to be %s or compatible, checking CFI\n", dev->name); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 if (do_w16(bi->base_addr + 0xAA, 0x98)) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 fprintf(stderr, "unexpected response to w16 - aborting\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 rc = run_cfi_check(bi, dev->cfi_table); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 if (rc < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 return(rc); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 if (!rc) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 printf("Confirmed %s or compatible\n", dev->name); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 bi->device = dev; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 return(0); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 static | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 spansion_pl129j_or_n(bi) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 struct flash_bank_info *bi; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 int rc; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 printf("Spansion PL129J or PL129N, looking at CFI\n"); | 
| 507 
c942be3c7997
new flash support works for PL129N on the Pirelli
 Mychaela Falconia <falcon@freecalypso.org> parents: 
506diff
changeset | 75 /* need to go back to read array first, CFI cmd ignored otherwise */ | 
| 
c942be3c7997
new flash support works for PL129N on the Pirelli
 Mychaela Falconia <falcon@freecalypso.org> parents: 
506diff
changeset | 76 if (do_w16(bi->base_addr + 0xAAA, 0xF0)) { | 
| 
c942be3c7997
new flash support works for PL129N on the Pirelli
 Mychaela Falconia <falcon@freecalypso.org> parents: 
506diff
changeset | 77 bad_w16: fprintf(stderr, "unexpected response to w16 - aborting\n"); | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 } | 
| 507 
c942be3c7997
new flash support works for PL129N on the Pirelli
 Mychaela Falconia <falcon@freecalypso.org> parents: 
506diff
changeset | 80 if (do_w16(bi->base_addr + 0xAAA, 0x98)) | 
| 
c942be3c7997
new flash support works for PL129N on the Pirelli
 Mychaela Falconia <falcon@freecalypso.org> parents: 
506diff
changeset | 81 goto bad_w16; | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 rc = run_cfi_check(bi, flashdev_PL129N.cfi_table); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 if (rc < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 return(rc); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 if (rc) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 printf("Found PL129N\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 bi->device = &flashdev_PL129N; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 return(0); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 rc = run_cfi_check(bi, flashdev_PL129J.cfi_table); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 if (rc < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 return(rc); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 if (rc) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 printf("Found PL129J\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 bi->device = &flashdev_PL129J; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 return(0); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 fprintf(stderr, "Error: no matching CFI found\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 static | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 amd_extended_id(bi) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 struct flash_bank_info *bi; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 uint16_t ext1, ext2; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 | 
| 507 
c942be3c7997
new flash support works for PL129N on the Pirelli
 Mychaela Falconia <falcon@freecalypso.org> parents: 
506diff
changeset | 108 printf("AMD-style extended ID device, reading extended ID\n"); | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 if (do_r16(bi->base_addr + 0x1C, &ext1) < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 if (do_r16(bi->base_addr + 0x1E, &ext2) < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 printf("Extended ID: %04X %04X\n", ext1, ext2); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 if (ext1 == 0x2221 && ext2 == 0x2200) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 return spansion_pl129j_or_n(bi); | 
| 553 
3886a8a40809
fc-loadtool: added support for old Am29DL640G flash chip
 Mychaela Falconia <falcon@freecalypso.org> parents: 
523diff
changeset | 116 if (ext1 == 0x2202 && ext2 == 0x2201) | 
| 
3886a8a40809
fc-loadtool: added support for old Am29DL640G flash chip
 Mychaela Falconia <falcon@freecalypso.org> parents: 
523diff
changeset | 117 return try_device(bi, &flashdev_Am29DL640G); | 
| 559 
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
 Mychaela Falconia <falcon@freecalypso.org> parents: 
553diff
changeset | 118 if (ext1 == 0x220A && ext2 == 0x2201) | 
| 
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
 Mychaela Falconia <falcon@freecalypso.org> parents: 
553diff
changeset | 119 return try_device(bi, &flashdev_PL032J); | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 fprintf(stderr, "Error: unknown device ID\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 | 
| 523 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 124 static | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 125 samsung_extended_id(bi) | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 126 struct flash_bank_info *bi; | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 127 { | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 128 uint16_t ext1, ext2; | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 129 | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 130 printf("Samsung extended ID device, reading extended ID\n"); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 131 if (do_r16(bi->base_addr + 0x1C, &ext1) < 0) | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 132 return(-1); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 133 if (do_r16(bi->base_addr + 0x1E, &ext2) < 0) | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 134 return(-1); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 135 printf("Extended ID: %04X %04X\n", ext1, ext2); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 136 if (ext1 == 0x2503 && ext2 == 0x2501) | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 137 return try_device(bi, &flashdev_K5L33xx_A); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 138 fprintf(stderr, "Error: unknown device ID\n"); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 139 return(-1); | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 140 } | 
| 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 141 | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 static struct idmap { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 uint16_t manuf_id; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 uint16_t dev_id; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 int (*handler)(); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 void *extra_arg; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 } device_id_table[] = { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 /* AMD/Spansion devices */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 {0x0001, 0x227E, amd_extended_id, 0}, | 
| 511 
0212edcec4d2
loadtools/flashid.c: added alt ID for 28F320C3T equiv in Mot C139
 Mychaela Falconia <falcon@freecalypso.org> parents: 
507diff
changeset | 150 /* 28F160C3T and 28F320C3T equivalents found in some Mot C1xx phones */ | 
| 
0212edcec4d2
loadtools/flashid.c: added alt ID for 28F320C3T equiv in Mot C139
 Mychaela Falconia <falcon@freecalypso.org> parents: 
507diff
changeset | 151 {0x0020, 0x88BA, try_device, &flashdev_28F320C3T}, | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 {0x0020, 0x88CE, try_device, &flashdev_28F160C3T}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 /* Intel flash chips */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 {0x0089, 0x8854, try_device, &flashdev_28F640W30T}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 {0x0089, 0x8855, try_device, &flashdev_28F640W30B}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 {0x0089, 0x8864, try_device, &flashdev_28F640W30T}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 {0x0089, 0x88C2, try_device, &flashdev_28F160C3T}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 {0x0089, 0x88C4, try_device, &flashdev_28F320C3T}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 {0x0089, 0x88CC, try_device, &flashdev_28F640C3T}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 {0x0089, 0x88CD, try_device, &flashdev_28F640C3B}, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 /* Samsung flash */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 {0x00EC, 0x22A0, try_device, &flashdev_K5A32xx_T}, | 
| 523 
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
 Mychaela Falconia <falcon@freecalypso.org> parents: 
511diff
changeset | 163 {0x00EC, 0x257E, samsung_extended_id, 0}, | 
| 506 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 /* table search terminator */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 {0, 0, 0, 0} | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 }; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 flash_detect(bank, repeat) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 struct flash_bank_info *bi; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 uint16_t manuf_id, dev_id; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 struct idmap *tp; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 int rc; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 bi = flash_bank_info + bank; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 if (bi->detect_done && !repeat) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 return(0); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 printf("Autodetecting flash chip type\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 if (do_w16(bi->base_addr + 0xAAA, 0xAA)) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 bad_w16: fprintf(stderr, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 "unexpected response to w16 in read ID cmd sequence - aborting\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 if (do_w16(bi->base_addr + 0x554, 0x55)) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 goto bad_w16; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 if (do_w16(bi->base_addr + 0xAAA, 0x90)) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 goto bad_w16; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 if (do_r16(bi->base_addr, &manuf_id) < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 if (do_r16(bi->base_addr + 2, &dev_id) < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 printf("Basic device ID: %04X %04X\n", manuf_id, dev_id); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 for (tp = device_id_table; tp->handler; tp++) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 if (tp->manuf_id == manuf_id && tp->dev_id == dev_id) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 break; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 if (!tp->handler) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 fprintf(stderr, "Error: unknown device ID\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 rc = tp->handler(bi, tp->extra_arg); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 if (rc < 0) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 return(rc); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 /* got the device, see if it is compatible with global config */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 if (bi->device->required_global_config > flash_global_config) { | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 fprintf(stderr, | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 "Error: detected flash device is not compatible with the configured mapping\n"); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 return(-1); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 } | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 /* good to go */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 if (bi->device->bank_geom[1] && bank) | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 bi->geom = bi->device->bank_geom[1]; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 else | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 bi->geom = bi->device->bank_geom[0]; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 bi->ops = bi->device->cmdset; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 bi->detect_done = 1; | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 /* return device to read array mode */ | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 return bi->ops->reset_cmd(bi); | 
| 
0dd2c87c1b63
fc-loadtool flash support overhaul
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 } | 
