FreeCalypso > hg > freecalypso-tools
annotate loadtools/flashid.c @ 619:f82551c77e58
libserial-newlnx: ASYNC_LOW_LATENCY patch reverted
Reports from Das Signal indicate that loadtools performance on Debian
is about the same as on Slackware, and that including or omitting the
ASYNC_LOW_LATENCY patch from Serg makes no difference. Because the
patch in question does not appear to be necessary, it is being reverted
until and unless someone other than Serg reports an actual real-world
system on which loadtools operation times are slowed compared to the
Mother's Slackware reference and on which Slackware-like performance
can be restored by setting the ASYNC_LOW_LATENCY flag.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 27 Feb 2020 01:09:48 +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:
523
diff
changeset
|
17 extern struct flash_device flashdev_Am29DL640G; |
559
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
553
diff
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:
511
diff
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:
506
diff
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:
506
diff
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:
506
diff
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:
506
diff
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:
506
diff
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:
506
diff
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:
523
diff
changeset
|
116 if (ext1 == 0x2202 && ext2 == 0x2201) |
3886a8a40809
fc-loadtool: added support for old Am29DL640G flash chip
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
117 return try_device(bi, &flashdev_Am29DL640G); |
559
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
553
diff
changeset
|
118 if (ext1 == 0x220A && ext2 == 0x2201) |
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
553
diff
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:
511
diff
changeset
|
124 static |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
125 samsung_extended_id(bi) |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
126 struct flash_bank_info *bi; |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
127 { |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
128 uint16_t ext1, ext2; |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
129 |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
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:
511
diff
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:
511
diff
changeset
|
132 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
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:
511
diff
changeset
|
134 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
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:
511
diff
changeset
|
136 if (ext1 == 0x2503 && ext2 == 0x2501) |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
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:
511
diff
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:
511
diff
changeset
|
139 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
140 } |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
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:
507
diff
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:
507
diff
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:
511
diff
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 } |