FreeCalypso > hg > freecalypso-sw
annotate target-utils/libload/intelflash.c @ 992:a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
The new implementation should work with both the familiar Calypso C035
boot ROM version found in our regular targets as well as the older
Calypso F741979B version found on the vintage D-Sample board.
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Wed, 30 Dec 2015 21:28:41 +0000 |
parents | d7f409493eb6 |
children |
rev | line source |
---|---|
404
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This module implements the INFB and INFW commands for programming |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * Intel-style flash memories. The syntax and operation are exactly |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 * the same as the AMD flash counterparts AMFB and AMFW. |
411
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
5 * |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
6 * The intel-rewrite-sector command (erase+program with a minimum of |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
7 * vulnerability for brickable-boot Compal phones) is implemented |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
8 * here as well. |
404
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 */ |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include <sys/types.h> |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 #include "types.h" |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 static u32 base_addr; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 void |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 cmd_INFB(argbulk) |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 char *argbulk; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 char *argv[2]; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 u_long addr; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 if (parse_args(argbulk, 1, 1, argv, 0) < 0) |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 if (parse_hexarg(argv[0], 8, &addr) < 0) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 printf("ERROR: argument must be a valid 32-bit hex address\n"); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 if (addr & 1) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 printf("ERROR: odd address\n"); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 base_addr = addr; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 void |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 cmd_INFW(argbulk) |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 char *argbulk; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 char *argv[3], *s; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 u_long offset; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 volatile u16 *flashptr; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 u32 datum; /* needs to be u32 for decode_hex_digits() */ |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 u16 stat; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 int i; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 if (parse_args(argbulk, 2, 2, argv, 0) < 0) |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 if (parse_hexarg(argv[0], 8, &offset) < 0) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 printf("ERROR: offset argument must a valid 32-bit hex value\n"); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 if (offset & 1) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 printf("ERROR: odd offset argument\n"); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 flashptr = (volatile u16 *)(base_addr + offset); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 for (s = argv[1]; *s; flashptr++, s += 4) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 if (decode_hex_digits(s, 4, &datum) < 0) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 printf("ERROR: bad INFW hex string argument\n"); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 *flashptr = 0x40; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 *flashptr = datum; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 for (i = 10000; i; i--) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 stat = *flashptr; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 if (stat & 0x80) |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 break; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 if (!i) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 printf("ERROR: flash write timeout at %08X\n", |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 (u_long) flashptr); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 if (stat & 0x10) { |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
76 printf("ERROR: program operation failed at %08X\n", |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 (u_long) flashptr); |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 return; |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 } |
7daea2476062
loadagent: Intel flash support added, compiles
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 } |
411
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
82 |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
83 void |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
84 cmd_intel_rewrite_sector(argbulk) |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
85 char *argbulk; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
86 { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
87 char *argv[4]; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
88 u_long srcaddr, dstaddr, len; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
89 const u16 *srcptr; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
90 volatile u16 *flashptr; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
91 u16 stat; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
92 |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
93 if (parse_args(argbulk, 3, 3, argv, 0) < 0) |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
94 return; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
95 if (parse_hexarg(argv[0], 8, &srcaddr) < 0) { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
96 invarg: printf("ERROR: invalid argument(s)\n"); |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
97 return; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
98 } |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
99 if (parse_hexarg(argv[1], 8, &dstaddr) < 0) |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
100 goto invarg; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
101 if (parse_hexarg(argv[2], 8, &len) < 0) |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
102 goto invarg; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
103 if (srcaddr & 1 || dstaddr & 1 || len & 1) { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
104 printf("ERROR: all 3 arguments must be even\n"); |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
105 return; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
106 } |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
107 srcptr = (const u16 *) srcaddr; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
108 flashptr = (volatile u16 *) dstaddr; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
109 /* unlock the flash sector first */ |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
110 *flashptr = 0x60; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
111 *flashptr = 0xD0; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
112 /* clear SR */ |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
113 *flashptr = 0x50; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
114 /* erase */ |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
115 *flashptr = 0x20; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
116 *flashptr = 0xD0; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
117 /* wait for erase completion */ |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
118 for (;;) { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
119 stat = *flashptr; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
120 if (stat & 0x80) |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
121 break; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
122 } |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
123 if (stat & 0x30) { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
124 printf("ERROR: erase operation failed!\n"); |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
125 return; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
126 } |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
127 /* now program the new content */ |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
128 for (; len; len -= 2) { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
129 *flashptr = 0x40; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
130 *flashptr = *srcptr++; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
131 for (;;) { |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
132 stat = *flashptr; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
133 if (stat & 0x80) |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
134 break; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
135 } |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
136 flashptr++; |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
137 } |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
138 printf("Operation complete, final SR: %02X\n", stat & 0xFF); |
d7f409493eb6
loadagent: intel-rewrite-sector implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
404
diff
changeset
|
139 } |