FreeCalypso > hg > freecalypso-tools
annotate loadtools/flashid.c @ 529:30bec872824a
doc/Target-utils: flash-boot-test documented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 16 Jun 2019 18:42:44 +0000 |
parents | 9a478d33b3ca |
children | 3886a8a40809 |
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; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 extern struct flash_device flashdev_PL129J; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 extern struct flash_device flashdev_PL129N; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 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
|
20 extern struct flash_device flashdev_K5L33xx_A; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 extern int flash_global_config; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 extern struct flash_bank_info flash_bank_info[2]; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 static |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 run_cfi_check(bi, table) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 struct cfi_check *table; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 struct cfi_check *tp; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 uint16_t rdword; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 for (tp = table; tp->offset >= 0; tp++) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 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
|
35 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 if (rdword != tp->expect_val) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 return(1); |
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 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 static |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 try_device(bi, dev) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 struct flash_device *dev; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 int rc; |
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 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
|
50 if (do_w16(bi->base_addr + 0xAA, 0x98)) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 fprintf(stderr, "unexpected response to w16 - aborting\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 rc = run_cfi_check(bi, dev->cfi_table); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (!rc) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 printf("Confirmed %s or compatible\n", dev->name); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 bi->device = dev; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 static |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 spansion_pl129j_or_n(bi) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 int rc; |
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 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
|
73 /* 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
|
74 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
|
75 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
|
76 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 } |
507
c942be3c7997
new flash support works for PL129N on the Pirelli
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
78 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
|
79 goto bad_w16; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 rc = run_cfi_check(bi, flashdev_PL129N.cfi_table); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 if (rc) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 printf("Found PL129N\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 bi->device = &flashdev_PL129N; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 rc = run_cfi_check(bi, flashdev_PL129J.cfi_table); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 if (rc) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 printf("Found PL129J\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 bi->device = &flashdev_PL129J; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 fprintf(stderr, "Error: no matching CFI found\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 static |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 amd_extended_id(bi) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 uint16_t ext1, ext2; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 |
507
c942be3c7997
new flash support works for PL129N on the Pirelli
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
106 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
|
107 if (do_r16(bi->base_addr + 0x1C, &ext1) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 if (do_r16(bi->base_addr + 0x1E, &ext2) < 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 printf("Extended ID: %04X %04X\n", ext1, ext2); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 if (ext1 == 0x2221 && ext2 == 0x2200) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 return spansion_pl129j_or_n(bi); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 fprintf(stderr, "Error: unknown device ID\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 |
523
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
118 static |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
119 samsung_extended_id(bi) |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
120 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
|
121 { |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
122 uint16_t ext1, ext2; |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
123 |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
124 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
|
125 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
|
126 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
127 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
|
128 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
129 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
|
130 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
|
131 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
|
132 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
|
133 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
134 } |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
135 |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 static struct idmap { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 uint16_t manuf_id; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 uint16_t dev_id; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 int (*handler)(); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 void *extra_arg; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 } device_id_table[] = { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 /* AMD/Spansion devices */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 {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
|
144 /* 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
|
145 {0x0020, 0x88BA, try_device, &flashdev_28F320C3T}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 {0x0020, 0x88CE, try_device, &flashdev_28F160C3T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 /* Intel flash chips */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 {0x0089, 0x8854, try_device, &flashdev_28F640W30T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 {0x0089, 0x8855, try_device, &flashdev_28F640W30B}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 {0x0089, 0x8864, try_device, &flashdev_28F640W30T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 {0x0089, 0x88C2, try_device, &flashdev_28F160C3T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 {0x0089, 0x88C4, try_device, &flashdev_28F320C3T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 {0x0089, 0x88CC, try_device, &flashdev_28F640C3T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 {0x0089, 0x88CD, try_device, &flashdev_28F640C3B}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 /* Samsung flash */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 {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
|
157 {0x00EC, 0x257E, samsung_extended_id, 0}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 /* table search terminator */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 {0, 0, 0, 0} |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 }; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 flash_detect(bank, repeat) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 uint16_t manuf_id, dev_id; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 struct idmap *tp; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 int rc; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 bi = flash_bank_info + bank; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 if (bi->detect_done && !repeat) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 printf("Autodetecting flash chip type\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 if (do_w16(bi->base_addr + 0xAAA, 0xAA)) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 bad_w16: fprintf(stderr, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 "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
|
176 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 if (do_w16(bi->base_addr + 0x554, 0x55)) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 goto bad_w16; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 if (do_w16(bi->base_addr + 0xAAA, 0x90)) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 goto bad_w16; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 if (do_r16(bi->base_addr, &manuf_id) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 if (do_r16(bi->base_addr + 2, &dev_id) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 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
|
187 for (tp = device_id_table; tp->handler; tp++) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 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
|
189 break; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 if (!tp->handler) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 fprintf(stderr, "Error: unknown device ID\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 rc = tp->handler(bi, tp->extra_arg); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 /* 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
|
198 if (bi->device->required_global_config > flash_global_config) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 fprintf(stderr, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 "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
|
201 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 /* good to go */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 if (bi->device->bank_geom[1] && bank) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 bi->geom = bi->device->bank_geom[1]; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 else |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 bi->geom = bi->device->bank_geom[0]; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 bi->ops = bi->device->cmdset; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 bi->detect_done = 1; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 /* return device to read array mode */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 return bi->ops->reset_cmd(bi); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 } |