FreeCalypso > hg > freecalypso-tools
annotate loadtools/flamdsec.c @ 982:1c5b485f10ba
fc-loadtool flash: do AMD reset after PL-J PPB write operations
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 02 Dec 2023 06:04:37 +0000 |
parents | f21798eb13cf |
children | 0407d14fb854 |
rev | line source |
---|---|
977
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
2 * This module is a place to implement commands and functions for |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
3 * sector write-protection (locking and unlocking, checking current |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
4 * lock state) on AMD-style flash chips. |
977
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/types.h> |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdio.h> |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdint.h> |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
11 #include <unistd.h> |
977
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "flash.h" |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 extern struct flash_bank_info flash_bank_info[2]; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
981
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
16 /* |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
17 * Some common functions for Spansion PL-N flash: common between |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
18 * flash lock-state retrieval and active PPB programming. |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
19 */ |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
20 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
21 static |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
22 pln_special_mode_entry(base_addr, mode_opc) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
23 uint32_t base_addr; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
24 uint16_t mode_opc; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
25 { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
26 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
27 bad_w16: fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
28 "unexpected response to w16 in PL-N special mode entry sequence - aborting\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
29 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
30 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
31 if (do_w16(base_addr + 0x554, 0x55)) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
32 goto bad_w16; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
33 if (do_w16(base_addr + 0xAAA, mode_opc)) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
34 goto bad_w16; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
35 return(0); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
36 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
37 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
38 static |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
39 pln_special_mode_exit(base_addr) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
40 uint32_t base_addr; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
41 { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
42 if (do_w16(base_addr, 0x90)) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
43 bad_w16: fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
44 "unexpected response to w16 in PL-N special mode exit sequence - aborting\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
45 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
46 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
47 if (do_w16(base_addr, 0x00)) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
48 goto bad_w16; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
49 return(0); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
50 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
51 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
52 /* |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
53 * flash lock-state implementation with its helper functions. |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
54 */ |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
55 |
977
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 issue_read_id(base_addr) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 uint32_t base_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 bad_w16: fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 "unexpected response to w16 in read ID cmd sequence - aborting\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 if (do_w16(base_addr + 0x554, 0x55)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 if (do_w16(base_addr + 0xAAA, 0x90)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 issue_reset_cmd(base_addr) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 uint32_t base_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 if (do_w16(base_addr + 0xAAA, 0xF0)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 "unexpected response to w16 when resetting flash to read mode!\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 read_mode_lock_word(base_addr, word_offset, retp) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 uint32_t base_addr, word_offset; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 uint16_t *retp; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 bad_w16: fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 "unexpected response to w16 in mode lock query sequence - aborting\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 if (do_w16(base_addr + 0x554, 0x55)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 if (do_w16(base_addr + 0xAAA, 0x60)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 if (do_w16(base_addr + word_offset, 0x48)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 if (do_r16(base_addr + word_offset, retp) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 flashcmd_lock_state(argc, argv, bank) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 char **argv; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 struct flash_bank_info *bi; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 struct amd_lock_info *li; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 struct lock_group_desc *grp; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 uint32_t offset, part_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 uint16_t word; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 unsigned ng, nb; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 if (argc > 2) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 fprintf(stderr, "error: too many arguments\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 if (flash_detect(bank, 0) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 bi = flash_bank_info + bank; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 li = bi->amd_lock; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 if (!li) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 "Operation not supported for this flash chip type\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 offset = 0; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 for (ng = 0; ng < li->ngroups; ng++) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 grp = li->groups + ng; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 if (grp->part_begin) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 part_addr = bi->base_addr + offset; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 if (issue_read_id(part_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 if (offset == 0 && li->have_status_word_3) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 if (do_r16(bi->base_addr + 6, &word) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 printf("Global status word 3: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 if (offset == 0 && li->have_status_word_7) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 if (do_r16(bi->base_addr + 0xE, &word) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 printf("Global status word 7: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 for (nb = 0; nb < grp->nblocks; nb++) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 if (do_r16(bi->base_addr + offset + 4, &word) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 printf("Sector%s at 0x%X: %s\n", |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 grp->is_group ? " group" : "", offset, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 (word & 1) ? "locked" : "unlocked"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 offset += grp->block_size; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 if (grp->part_end) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 if (issue_reset_cmd(part_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 if (li->have_mode_lock_bits) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 if (read_mode_lock_word(bi->base_addr, 0x14, &word) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 printf("Password Protection Mode lock: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 if (issue_reset_cmd(bi->base_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 if (read_mode_lock_word(bi->base_addr, 0x24, &word) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 printf("Persistent Protection Mode lock: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 if (issue_reset_cmd(bi->base_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 if (li->have_pln_lock_reg) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 if (pln_special_mode_entry(bi->base_addr, 0x40) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 if (do_r16(bi->base_addr, &word) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 printf("PL-N Lock Register: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 if (pln_special_mode_exit(bi->base_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 } |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
182 |
981
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
183 /* |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
184 * Spansion PL-J PPB write functions, referenced from lock_info structures |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
185 * in fldevs.c device descriptions. |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
186 */ |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
187 |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
188 static |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
189 plj_ppb_write_op(base_addr, is_erase, retp) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
190 uint32_t base_addr; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
191 uint16_t *retp; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
192 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
193 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
194 bad_w16: fprintf(stderr, |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
195 "unexpected response to w16 in PPB command sequence - aborting\n"); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
196 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
197 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
198 if (do_w16(base_addr + 0x554, 0x55)) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
199 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
200 if (do_w16(base_addr + 0xAAA, 0x60)) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
201 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
202 if (do_w16(base_addr + 4, is_erase ? 0x60 : 0x68)) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
203 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
204 usleep(1200); /* per S29PL-J datasheet */ |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
205 if (do_w16(base_addr + 4, is_erase ? 0x40 : 0x48)) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
206 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
207 if (do_r16(base_addr + 4, retp) < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
208 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
209 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
210 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
211 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
212 plj_ppb_program_one(bi, sector_addr) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
213 struct flash_bank_info *bi; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
214 uint32_t sector_addr; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
215 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
216 uint16_t stat; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
217 unsigned pulsecnt; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
218 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
219 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
220 for (pulsecnt = 0; pulsecnt < 25; ) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
221 rc = plj_ppb_write_op(bi->base_addr + sector_addr, 0, &stat); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
222 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
223 return(rc); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
224 pulsecnt++; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
225 if (!(stat & 1)) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
226 continue; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
227 printf("PPB 0x%X programmed with %u pulse%s\n", sector_addr, |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
228 pulsecnt, pulsecnt > 1 ? "s" : ""); |
982
1c5b485f10ba
fc-loadtool flash: do AMD reset after PL-J PPB write operations
Mychaela Falconia <falcon@freecalypso.org>
parents:
981
diff
changeset
|
229 return amd_reset_cmd(bi); |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
230 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
231 printf("PPB 0x%X programming FAILED, tried %u pulses\n", sector_addr, |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
232 pulsecnt); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
233 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
234 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
235 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
236 plj_ppb_program_all_single(bank) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
237 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
238 struct flash_bank_info *bi = flash_bank_info + bank; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
239 struct amd_lock_info *li = bi->amd_lock; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
240 struct lock_group_desc *grp; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
241 uint32_t offset; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
242 unsigned ng, nb; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
243 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
244 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
245 offset = 0; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
246 for (ng = 0; ng < li->ngroups; ng++) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
247 grp = li->groups + ng; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
248 for (nb = 0; nb < grp->nblocks; nb++) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
249 rc = plj_ppb_program_one(bi, offset); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
250 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
251 return(rc); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
252 offset += grp->block_size; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
253 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
254 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
255 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
256 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
257 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
258 plj_ppb_program_all_dualbank(reqbank) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
259 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
260 int altbank = !reqbank; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
261 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
262 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
263 if (flash_detect(altbank, 0) < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
264 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
265 if (flash_bank_info[0].device != flash_bank_info[1].device) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
266 fprintf(stderr, "error: mismatch between two flash banks\n"); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
267 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
268 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
269 printf("Programming all PPBs in flash bank 0\n"); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
270 rc = plj_ppb_program_all_single(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
271 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
272 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
273 printf("Programming all PPBs in flash bank 1\n"); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
274 rc = plj_ppb_program_all_single(1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
275 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
276 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
277 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
278 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
279 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
280 static |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
281 plj_ppb_erase_cycle(bank) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
282 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
283 struct flash_bank_info *bi = flash_bank_info + bank; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
284 uint16_t stat; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
285 unsigned pulsecnt; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
286 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
287 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
288 printf("Performing PPB erase cycle\n"); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
289 for (pulsecnt = 0; pulsecnt < 1000; ) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
290 rc = plj_ppb_write_op(bi->base_addr, 1, &stat); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
291 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
292 return(rc); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
293 pulsecnt++; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
294 if (stat & 1) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
295 continue; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
296 printf("PPB erase cycle succeeded after %u pulse%s\n", |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
297 pulsecnt, pulsecnt > 1 ? "s" : ""); |
982
1c5b485f10ba
fc-loadtool flash: do AMD reset after PL-J PPB write operations
Mychaela Falconia <falcon@freecalypso.org>
parents:
981
diff
changeset
|
298 return amd_reset_cmd(bi); |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
299 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
300 printf("PPB erase cycle FAILED, tried %u pulses\n", pulsecnt); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
301 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
302 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
303 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
304 plj_ppb_erase_all_single(bank) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
305 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
306 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
307 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
308 printf("Programming all PPBs before erase cycle\n"); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
309 rc = plj_ppb_program_all_single(bank); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
310 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
311 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
312 return plj_ppb_erase_cycle(bank); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
313 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
314 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
315 plj_ppb_erase_all_dualbank(reqbank) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
316 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
317 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
318 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
319 rc = plj_ppb_program_all_dualbank(reqbank); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
320 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
321 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
322 return plj_ppb_erase_cycle(reqbank); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
323 } |
981
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
324 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
325 /* |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
326 * Front end functions for PPB operation commands. |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
327 */ |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
328 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
329 flashcmd_ppb_program(argc, argv, bank) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
330 char **argv; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
331 { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
332 struct flash_bank_info *bi; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
333 struct amd_lock_info *li; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
334 u_long offset_arg; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
335 struct sector_info *sp; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
336 char *strtoul_endp; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
337 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
338 if (argc != 3) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
339 inv: fprintf(stderr, "usage: %s %s sector-offset\n", |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
340 argv[0], argv[1]); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
341 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
342 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
343 offset_arg = strtoul(argv[2], &strtoul_endp, 16); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
344 if (*strtoul_endp) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
345 goto inv; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
346 if (flash_detect(bank, 0) < 0) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
347 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
348 bi = flash_bank_info + bank; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
349 li = bi->amd_lock; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
350 if (!li || !li->ppb_program_one) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
351 fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
352 "Operation not supported for this flash chip type\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
353 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
354 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
355 if (offset_arg >= bi->geom->total_size) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
356 fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
357 "error: specified offset exceeds flash bank size (0x%lx)\n", |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
358 (u_long) bi->geom->total_size); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
359 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
360 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
361 if (get_flash_sector_table(bi) < 0) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
362 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
363 for (sp = bi->sectors; sp->size; sp++) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
364 if (sp->start == offset_arg) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
365 break; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
366 if (!sp->size) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
367 fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
368 "error: specified offset not aligned to a flash sector boundary\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
369 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
370 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
371 return li->ppb_program_one(bi, sp->start); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
372 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
373 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
374 flashcmd_ppb_program_all(argc, argv, bank) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
375 char **argv; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
376 { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
377 struct flash_bank_info *bi; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
378 struct amd_lock_info *li; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
379 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
380 if (argc > 2) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
381 fprintf(stderr, "error: too many arguments\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
382 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
383 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
384 if (flash_detect(bank, 0) < 0) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
385 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
386 bi = flash_bank_info + bank; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
387 li = bi->amd_lock; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
388 if (!li || !li->ppb_program_all) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
389 fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
390 "Operation not supported for this flash chip type\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
391 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
392 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
393 return li->ppb_program_all(bank); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
394 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
395 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
396 flashcmd_ppb_erase_all(argc, argv, bank) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
397 char **argv; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
398 { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
399 struct flash_bank_info *bi; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
400 struct amd_lock_info *li; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
401 |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
402 if (argc > 2) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
403 fprintf(stderr, "error: too many arguments\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
404 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
405 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
406 if (flash_detect(bank, 0) < 0) |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
407 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
408 bi = flash_bank_info + bank; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
409 li = bi->amd_lock; |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
410 if (!li || !li->ppb_erase_all) { |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
411 fprintf(stderr, |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
412 "Operation not supported for this flash chip type\n"); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
413 return(-1); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
414 } |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
415 return li->ppb_erase_all(bank); |
f21798eb13cf
fc-loadtool: implement flash ppb-* commands
Mychaela Falconia <falcon@freecalypso.org>
parents:
979
diff
changeset
|
416 } |