FreeCalypso > hg > freecalypso-tools
annotate loadtools/flprogbin.c @ 666:51bcfb251b23
fc-loadtool flash program-m0 changed to use binary protocol
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 07 Mar 2020 19:28:09 +0000 |
parents | b43d8c2725b9 |
children | 57cb825b505a |
rev | line source |
---|---|
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This module implements the flash program-bin command: |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * programming flash using a binary file as the data source. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/types.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/stat.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdio.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdint.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <time.h> |
666
51bcfb251b23
fc-loadtool flash program-m0 changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
665
diff
changeset
|
12 #include <unistd.h> |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "flash.h" |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
15 extern int target_fd; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
16 |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 extern struct flash_bank_info flash_bank_info[2]; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 extern uint32_t crc32_table[]; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 flashcmd_progbin(argc, argv, bank) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 char **argv; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 struct flash_bank_info *bi; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 u_long flashoff, fileoff, len, origlen, bytesdone; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 u_long crc_base_addr, crc_from_target; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 uint32_t crcaccum; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 char *strtoul_endp; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 FILE *binf; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 struct stat filestat; |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
30 char *targv[3], shortarg[10]; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
31 u_char databuf[2048 + 7], ackbyte; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 int reclen, cc, i; |
612
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
33 time_t initial_time, curtime, last_time; |
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
34 unsigned duration, mm, ss; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 if (argc < 4 || argc > 6) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 inv: fprintf(stderr, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 "usage: %s %s flash-offset binfile [file-offset [length]]\n", |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 argv[0], argv[1]); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 flashoff = strtoul(argv[2], &strtoul_endp, 16); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 if (*strtoul_endp) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 goto inv; |
506
0dd2c87c1b63
fc-loadtool flash support overhaul
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
45 if (flash_detect(bank, 0) < 0) |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 bi = flash_bank_info + bank; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 if (flashoff >= bi->geom->total_size) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 fprintf(stderr, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 "error: specified flash offset exceeds bank size (0x%lx)\n", |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 (u_long) bi->geom->total_size); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 if (flashoff & 1) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 fprintf(stderr, "error: flash offset must be even\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 binf = fopen(argv[3], "r"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 if (!binf) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 perror(argv[3]); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 fstat(fileno(binf), &filestat); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 if (!S_ISREG(filestat.st_mode)) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 fprintf(stderr, "%s is not a regular file\n", argv[3]); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 if (argc > 4) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 fileoff = strtoul(argv[4], &strtoul_endp, 16); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 if (*strtoul_endp) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 goto inv; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 if (fileoff > filestat.st_size) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 fprintf(stderr, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 "error: specified file offset exceeds file length\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 } else |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 fileoff = 0; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 if (argc > 5) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 len = strtoul(argv[5], &strtoul_endp, 16); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 if (*strtoul_endp) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 goto inv; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 if (len > filestat.st_size - fileoff) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 fprintf(stderr, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 "error: specified file offset+length exceed file length\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 } else |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 len = filestat.st_size - fileoff; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 if (!len) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 printf("Length is zero - nothing to do!\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 return(0); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 if (len > bi->geom->total_size - flashoff) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 fprintf(stderr, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 "error: specified flash offset+length exceed bank size (0x%lx)\n", |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 (u_long) bi->geom->total_size); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 if (len & 1) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 fprintf(stderr, "error: program length must be even\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 /* finally done with the arg parsing etc, can get to work now */ |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 crc_base_addr = bi->base_addr + flashoff; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 sprintf(shortarg, "%lx", (u_long) bi->base_addr); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 targv[0] = bi->ops->loadagent_setbase_cmd; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 targv[1] = shortarg; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 targv[2] = 0; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 printf("Setting flash base address: %s %s\n", targv[0], targv[1]); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 tpinterf_make_cmd(targv); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 if (tpinterf_send_cmd() < 0) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 cc = tpinterf_pass_output(1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 if (cc) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 return(cc); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 if (bi->ops->prep_for_program(bi) < 0) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 fseek(binf, fileoff, SEEK_SET); |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
137 targv[0] = bi->ops->loadagent_binmode_cmd; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
138 targv[1] = 0; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
139 tpinterf_make_cmd(targv); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
140 if (tpinterf_send_cmd() < 0) { |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
141 fclose(binf); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
142 return(-1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
143 } |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 printf("Programming flash: %lu (0x%lx) bytes\n", len, len); |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
145 databuf[0] = 0x01; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 origlen = len; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 bytesdone = 0; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 last_time = 0; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 crcaccum = 0xFFFFFFFF; |
612
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
150 time(&initial_time); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 while (len) { |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
152 if (len >= 2048) |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
153 reclen = 2048; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 else |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 reclen = len; |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
156 cc = fread(databuf + 7, 1, reclen, binf); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 if (cc != reclen) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 fprintf(stderr, "error reading from %s\n", argv[3]); |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
160 /* don't leave loadagent in binary flash mode */ |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
161 databuf[0] = 0x04; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
162 write(target_fd, databuf, 1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
163 tpinterf_pass_output(1); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 for (i = 0; i < reclen; i++) /* update running CRC */ |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
167 crcaccum = crc32_table[crcaccum & 0xFF ^ databuf[i+7]] |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 ^ (crcaccum >> 8); |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
169 /* binary flash write command to loadagent */ |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
170 databuf[1] = flashoff >> 24; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
171 databuf[2] = flashoff >> 16; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
172 databuf[3] = flashoff >> 8; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
173 databuf[4] = flashoff; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
174 databuf[5] = reclen >> 8; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
175 databuf[6] = reclen; |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
176 cc = write(target_fd, databuf, reclen + 7); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
177 if (cc != reclen + 7) { |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 fclose(binf); |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
179 perror("binary write to target"); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 } |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
182 i = collect_binblock_from_target(&ackbyte, 1, 8); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 if (i) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 fclose(binf); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 return(i); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 } |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
187 if (ackbyte == 0x15) { /* NAK */ |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
188 fclose(binf); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
189 tpinterf_pass_output(1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
190 return(-1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
191 } |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
192 if (ackbyte != 0x06) { /* ACK */ |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
193 fclose(binf); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
194 fprintf(stderr, |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
195 "binary protocol error: bad ack 0x%02X\n", |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
196 ackbyte); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
197 return(-1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
198 } |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 flashoff += reclen; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 len -= reclen; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 bytesdone += reclen; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 cc = bytesdone * 100 / origlen; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 time(&curtime); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 if (curtime != last_time || cc == 100) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 printf("\r0x%lx bytes programmed (%i%%)", |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 bytesdone, cc); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 fflush(stdout); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 last_time = curtime; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 putchar('\n'); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 fclose(binf); |
665
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
213 databuf[0] = 0x04; /* EOT */ |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
214 write(target_fd, databuf, 1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
215 i = collect_binblock_from_target(&ackbyte, 1, 1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
216 if (i) |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
217 return(i); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
218 time(&last_time); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
219 if (ackbyte != '=') { |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
220 fprintf(stderr, "error: \'=\' not received as expected\n"); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
221 return(-1); |
b43d8c2725b9
fc-loadtool flash program-bin changed to use binary protocol
Mychaela Falconia <falcon@freecalypso.org>
parents:
612
diff
changeset
|
222 } |
612
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
223 duration = last_time - initial_time; |
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
224 mm = duration / 60; |
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
225 ss = duration - mm * 60; |
52980e3a51c7
fc-loadtool: added operation time reporting to flash program-bin
Mychaela Falconia <falcon@freecalypso.org>
parents:
506
diff
changeset
|
226 printf("Operation completed in %um%us\n", mm, ss); |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 /* reset flash to read mode */ |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 if (bi->ops->reset_cmd(bi) < 0) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 printf("Verifying CRC-32 of programmed flash area\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 if (crc32_on_target(crc_base_addr, origlen, &crc_from_target) < 0) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 if (crc_from_target == crcaccum) { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 printf("match (%08lX)\n", crc_from_target); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 return(0); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 } else { |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 fprintf(stderr, "error: CRC mismatch!\n"); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 return(-1); |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 } |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 } |