FreeCalypso > hg > freecalypso-tools
annotate loadtools/flashid.c @ 999:30fad2b3afd2
doc/Flash-write-protection: document flash lock-state retrieval
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 04 Dec 2023 20:40:50 +0000 |
parents | ff4ce8d5ece4 |
children |
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; |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
12 extern struct flash_device flashdev_28F160C3B; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 extern struct flash_device flashdev_28F320C3T; |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
14 extern struct flash_device flashdev_28F320C3B; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 extern struct flash_device flashdev_28F640C3T; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 extern struct flash_device flashdev_28F640C3B; |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
17 extern struct flash_device flashdev_28F320W30T; |
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
18 extern struct flash_device flashdev_28F320W30B; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern struct flash_device flashdev_28F640W30T; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 extern struct flash_device flashdev_28F640W30B; |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
21 |
553
3886a8a40809
fc-loadtool: added support for old Am29DL640G flash chip
Mychaela Falconia <falcon@freecalypso.org>
parents:
523
diff
changeset
|
22 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
|
23 extern struct flash_device flashdev_PL032J; |
976
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
24 extern struct flash_device flashdev_PL064J; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern struct flash_device flashdev_PL129J; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 extern struct flash_device flashdev_PL129N; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 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
|
28 extern struct flash_device flashdev_K5L33xx_A; |
916
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
29 extern struct flash_device flashdev_K5L29xx_A; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 extern int flash_global_config; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 extern struct flash_bank_info flash_bank_info[2]; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 static |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 run_cfi_check(bi, table) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 struct cfi_check *table; |
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 struct cfi_check *tp; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 uint16_t rdword; |
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 for (tp = table; tp->offset >= 0; tp++) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 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
|
44 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (rdword != tp->expect_val) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 return(1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 } |
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 static |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 try_device(bi, dev) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 struct flash_device *dev; |
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 int rc; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 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
|
59 if (do_w16(bi->base_addr + 0xAA, 0x98)) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 fprintf(stderr, "unexpected response to w16 - aborting\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 rc = run_cfi_check(bi, dev->cfi_table); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 if (!rc) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 return(-1); |
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 printf("Confirmed %s or compatible\n", dev->name); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 bi->device = dev; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 return(0); |
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 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 static |
916
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
76 try_device_amdreset(bi, dev) |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
77 struct flash_bank_info *bi; |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
78 struct flash_device *dev; |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
79 { |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
80 int rc; |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
81 |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
82 printf("Appears to be %s or compatible, checking CFI\n", dev->name); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
83 /* need to go back to read array first, CFI cmd ignored otherwise */ |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
84 if (do_w16(bi->base_addr + 0xAAA, 0xF0)) { |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
85 bad_w16: fprintf(stderr, "unexpected response to w16 - aborting\n"); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
86 return(-1); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
87 } |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
88 if (do_w16(bi->base_addr + 0xAA, 0x98)) |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
89 goto bad_w16; |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
90 rc = run_cfi_check(bi, dev->cfi_table); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
91 if (rc < 0) |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
92 return(rc); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
93 if (!rc) { |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
94 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
95 return(-1); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
96 } |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
97 printf("Confirmed %s or compatible\n", dev->name); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
98 bi->device = dev; |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
99 return(0); |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
100 } |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
101 |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
102 static |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 spansion_pl129j_or_n(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 int rc; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 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
|
109 /* 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
|
110 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
|
111 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
|
112 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } |
507
c942be3c7997
new flash support works for PL129N on the Pirelli
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
114 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
|
115 goto bad_w16; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 rc = run_cfi_check(bi, flashdev_PL129N.cfi_table); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 if (rc) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 printf("Found PL129N\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 bi->device = &flashdev_PL129N; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 rc = run_cfi_check(bi, flashdev_PL129J.cfi_table); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 if (rc) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 printf("Found PL129J\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 bi->device = &flashdev_PL129J; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 fprintf(stderr, "Error: no matching CFI found\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 static |
976
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
137 spansion_pl064j_or_oldamd(bi) |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
138 struct flash_bank_info *bi; |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
139 { |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
140 int rc; |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
141 |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
142 printf("Am29DL640G or PL064J, looking at CFI\n"); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
143 if (do_w16(bi->base_addr + 0xAA, 0x98)) { |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
144 fprintf(stderr, "unexpected response to w16 - aborting\n"); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
145 return(-1); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
146 } |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
147 rc = run_cfi_check(bi, flashdev_PL064J.cfi_table); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
148 if (rc < 0) |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
149 return(rc); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
150 if (rc) { |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
151 printf("Found PL064J\n"); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
152 bi->device = &flashdev_PL064J; |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
153 return(0); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
154 } |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
155 rc = run_cfi_check(bi, flashdev_Am29DL640G.cfi_table); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
156 if (rc < 0) |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
157 return(rc); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
158 if (rc) { |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
159 printf("Found Am29DL640G\n"); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
160 bi->device = &flashdev_Am29DL640G; |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
161 return(0); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
162 } |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
163 fprintf(stderr, "Error: no matching CFI found\n"); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
164 return(-1); |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
165 } |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
166 |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
167 static |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 amd_extended_id(bi) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 uint16_t ext1, ext2; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 |
507
c942be3c7997
new flash support works for PL129N on the Pirelli
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
173 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
|
174 if (do_r16(bi->base_addr + 0x1C, &ext1) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 if (do_r16(bi->base_addr + 0x1E, &ext2) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 printf("Extended ID: %04X %04X\n", ext1, ext2); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 if (ext1 == 0x2221 && ext2 == 0x2200) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 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
|
181 if (ext1 == 0x2202 && ext2 == 0x2201) |
976
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
182 return spansion_pl064j_or_oldamd(bi); |
559
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
553
diff
changeset
|
183 if (ext1 == 0x220A && ext2 == 0x2201) |
f229efbfd581
fc-loadtool: added support for S29PL032J/S71PL032J flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
553
diff
changeset
|
184 return try_device(bi, &flashdev_PL032J); |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 fprintf(stderr, "Error: unknown device ID\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 |
523
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
189 static |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
190 samsung_extended_id(bi) |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
191 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
|
192 { |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
193 uint16_t ext1, ext2; |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
194 |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
195 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
|
196 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
|
197 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
198 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
|
199 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
200 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
|
201 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
|
202 return try_device(bi, &flashdev_K5L33xx_A); |
916
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
203 if (ext1 == 0x2508 && ext2 == 0x2501) |
54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
Mychaela Falconia <falcon@freecalypso.org>
parents:
559
diff
changeset
|
204 return try_device_amdreset(bi, &flashdev_K5L29xx_A); |
523
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
205 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
|
206 return(-1); |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
207 } |
9a478d33b3ca
fc-loadtool: added Samsung K5L33xx_A flash support for GTM900
Mychaela Falconia <falcon@freecalypso.org>
parents:
511
diff
changeset
|
208 |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 static struct idmap { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 uint16_t manuf_id; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 uint16_t dev_id; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 int (*handler)(); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 void *extra_arg; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 } device_id_table[] = { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 /* AMD/Spansion devices */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 {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
|
217 /* 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
|
218 {0x0020, 0x88BA, try_device, &flashdev_28F320C3T}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 {0x0020, 0x88CE, try_device, &flashdev_28F160C3T}, |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
220 /* Intel W30 flash family */ |
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
221 {0x0089, 0x8852, try_device, &flashdev_28F320W30T}, |
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
222 {0x0089, 0x8853, try_device, &flashdev_28F320W30B}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 {0x0089, 0x8854, try_device, &flashdev_28F640W30T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 {0x0089, 0x8855, try_device, &flashdev_28F640W30B}, |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
225 /* Intel W18 flash family: same as W30, but different ID codes */ |
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
226 {0x0089, 0x8862, try_device, &flashdev_28F320W30T}, |
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
227 {0x0089, 0x8863, try_device, &flashdev_28F320W30B}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 {0x0089, 0x8864, try_device, &flashdev_28F640W30T}, |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
229 {0x0089, 0x8865, try_device, &flashdev_28F640W30B}, |
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
230 /* Intel C3 flash family */ |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 {0x0089, 0x88C2, try_device, &flashdev_28F160C3T}, |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
232 {0x0089, 0x88C3, try_device, &flashdev_28F160C3B}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 {0x0089, 0x88C4, try_device, &flashdev_28F320C3T}, |
973
7c18eac91457
loadtools: round out support for Intel flash families
Mychaela Falconia <falcon@freecalypso.org>
parents:
916
diff
changeset
|
234 {0x0089, 0x88C5, try_device, &flashdev_28F320C3B}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 {0x0089, 0x88CC, try_device, &flashdev_28F640C3T}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 {0x0089, 0x88CD, try_device, &flashdev_28F640C3B}, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 /* Samsung flash */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 {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
|
239 {0x00EC, 0x257E, samsung_extended_id, 0}, |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 /* table search terminator */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 {0, 0, 0, 0} |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 }; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 flash_detect(bank, repeat) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 struct flash_bank_info *bi; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 uint16_t manuf_id, dev_id; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 struct idmap *tp; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 int rc; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 bi = flash_bank_info + bank; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 if (bi->detect_done && !repeat) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 return(0); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 printf("Autodetecting flash chip type\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 if (do_w16(bi->base_addr + 0xAAA, 0xAA)) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 bad_w16: fprintf(stderr, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 "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
|
258 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 if (do_w16(bi->base_addr + 0x554, 0x55)) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 goto bad_w16; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 if (do_w16(bi->base_addr + 0xAAA, 0x90)) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 goto bad_w16; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 if (do_r16(bi->base_addr, &manuf_id) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 if (do_r16(bi->base_addr + 2, &dev_id) < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 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
|
269 for (tp = device_id_table; tp->handler; tp++) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 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
|
271 break; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 if (!tp->handler) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 fprintf(stderr, "Error: unknown device ID\n"); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 rc = tp->handler(bi, tp->extra_arg); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 if (rc < 0) |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 return(rc); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 /* 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
|
280 if (bi->device->required_global_config > flash_global_config) { |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 fprintf(stderr, |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 "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
|
283 return(-1); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 } |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 /* good to go */ |
976
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
286 if (bi->device->bank_geom[1] && bank) { |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 bi->geom = bi->device->bank_geom[1]; |
976
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
288 bi->amd_lock = bi->device->lock_info[1]; |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
289 } else { |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 bi->geom = bi->device->bank_geom[0]; |
976
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
291 bi->amd_lock = bi->device->lock_info[0]; |
ff4ce8d5ece4
fc-loadtool flash: definitions for AMD sector lock architecture
Mychaela Falconia <falcon@freecalypso.org>
parents:
973
diff
changeset
|
292 } |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 bi->ops = bi->device->cmdset; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 bi->detect_done = 1; |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 /* return device to read array mode */ |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 return bi->ops->reset_cmd(bi); |
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 } |