FreeCalypso > hg > freecalypso-tools
annotate loadtools/flamdsec.c @ 979:c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 02 Dec 2023 04:21:59 +0000 |
parents | 511e2b85c115 |
children | f21798eb13cf |
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 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 issue_read_id(base_addr) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 uint32_t base_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 bad_w16: fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 "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
|
23 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 if (do_w16(base_addr + 0x554, 0x55)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 if (do_w16(base_addr + 0xAAA, 0x90)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 issue_reset_cmd(base_addr) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 uint32_t base_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 if (do_w16(base_addr + 0xAAA, 0xF0)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 "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
|
39 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 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
|
46 uint32_t base_addr, word_offset; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 uint16_t *retp; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 bad_w16: fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 "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
|
52 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 if (do_w16(base_addr + 0x554, 0x55)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 if (do_w16(base_addr + 0xAAA, 0x60)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 if (do_w16(base_addr + word_offset, 0x48)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 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
|
61 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 } |
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 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 pln_special_mode_entry(base_addr, mode_opc) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 uint32_t base_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 uint16_t mode_opc; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 if (do_w16(base_addr + 0xAAA, 0xAA)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 bad_w16: fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 "unexpected response to w16 in PL-N special mode entry sequence - aborting\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 if (do_w16(base_addr + 0x554, 0x55)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 if (do_w16(base_addr + 0xAAA, mode_opc)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 return(0); |
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 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 static |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 pln_special_mode_exit(base_addr) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 uint32_t base_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 if (do_w16(base_addr, 0x90)) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 bad_w16: fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 "unexpected response to w16 in PL-N special mode exit sequence - aborting\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 if (do_w16(base_addr, 0x00)) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 goto bad_w16; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 flashcmd_lock_state(argc, argv, bank) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 char **argv; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 struct flash_bank_info *bi; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 struct amd_lock_info *li; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 struct lock_group_desc *grp; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 uint32_t offset, part_addr; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 uint16_t word; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 unsigned ng, nb; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 if (argc > 2) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 fprintf(stderr, "error: too many arguments\n"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (flash_detect(bank, 0) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 bi = flash_bank_info + bank; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 li = bi->amd_lock; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 if (!li) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 fprintf(stderr, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 "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
|
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 offset = 0; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 for (ng = 0; ng < li->ngroups; ng++) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 grp = li->groups + ng; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 if (grp->part_begin) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 part_addr = bi->base_addr + offset; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if (issue_read_id(part_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 if (offset == 0 && li->have_status_word_3) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 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
|
129 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 printf("Global status word 3: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 if (offset == 0 && li->have_status_word_7) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 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
|
134 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 printf("Global status word 7: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 for (nb = 0; nb < grp->nblocks; nb++) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 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
|
139 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 printf("Sector%s at 0x%X: %s\n", |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 grp->is_group ? " group" : "", offset, |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 (word & 1) ? "locked" : "unlocked"); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 offset += grp->block_size; |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 if (grp->part_end) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 if (issue_reset_cmd(part_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 if (li->have_mode_lock_bits) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 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
|
152 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 printf("Password Protection Mode lock: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 if (issue_reset_cmd(bi->base_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 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
|
157 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 printf("Persistent Protection Mode lock: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 if (issue_reset_cmd(bi->base_addr) < 0) |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 } |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 if (li->have_pln_lock_reg) { |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 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
|
164 return(-1); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 if (do_r16(bi->base_addr, &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("PL-N Lock Register: %04X\n", word); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 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
|
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 return(0); |
511e2b85c115
fc-loadtool: implement flash lock-state command
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 } |
979
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
173 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
174 static |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
175 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
|
176 uint32_t base_addr; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
177 uint16_t *retp; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
178 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
179 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
|
180 bad_w16: fprintf(stderr, |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
181 "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
|
182 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
183 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
184 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
|
185 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
186 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
|
187 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
188 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
|
189 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
190 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
|
191 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
|
192 goto bad_w16; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
193 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
|
194 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
195 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
196 } |
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 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
|
199 struct flash_bank_info *bi; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
200 uint32_t sector_addr; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
201 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
202 uint16_t stat; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
203 unsigned pulsecnt; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
204 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
205 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
206 for (pulsecnt = 0; pulsecnt < 25; ) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
207 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
|
208 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
209 return(rc); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
210 pulsecnt++; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
211 if (!(stat & 1)) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
212 continue; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
213 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
|
214 pulsecnt, pulsecnt > 1 ? "s" : ""); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
215 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
216 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
217 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
|
218 pulsecnt); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
219 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
220 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
221 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
222 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
|
223 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
224 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
|
225 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
|
226 struct lock_group_desc *grp; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
227 uint32_t offset; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
228 unsigned ng, nb; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
229 int rc; |
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 offset = 0; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
232 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
|
233 grp = li->groups + ng; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
234 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
|
235 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
|
236 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
237 return(rc); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
238 offset += grp->block_size; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
239 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
240 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
241 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
242 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
243 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
244 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
|
245 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
246 int altbank = !reqbank; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
247 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
248 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
249 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
|
250 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
251 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
|
252 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
|
253 return(-1); |
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 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
|
256 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
|
257 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
258 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
259 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
|
260 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
|
261 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
262 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
263 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
264 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
265 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
266 static |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
267 plj_ppb_erase_cycle(bank) |
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 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
|
270 uint16_t stat; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
271 unsigned pulsecnt; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
272 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
273 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
274 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
|
275 for (pulsecnt = 0; pulsecnt < 1000; ) { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
276 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
|
277 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
278 return(rc); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
279 pulsecnt++; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
280 if (stat & 1) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
281 continue; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
282 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
|
283 pulsecnt, pulsecnt > 1 ? "s" : ""); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
284 return(0); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
285 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
286 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
|
287 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
288 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
289 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
290 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
|
291 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
292 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
293 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
294 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
|
295 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
|
296 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
297 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
298 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
|
299 } |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
300 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
301 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
|
302 { |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
303 int rc; |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
304 |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
305 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
|
306 if (rc < 0) |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
307 return(-1); |
c5133c3c11b1
fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
977
diff
changeset
|
308 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
|
309 } |