annotate loadtools/flamdsec.c @ 981:f21798eb13cf

fc-loadtool: implement flash ppb-* commands
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 02 Dec 2023 05:46:00 +0000
parents c5133c3c11b1
children 1c5b485f10ba
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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" : "");
c5133c3c11b1 fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents: 977
diff changeset
229 return(0);
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" : "");
c5133c3c11b1 fc-loadtool flash: implement PL-J PPB programming functions
Mychaela Falconia <falcon@freecalypso.org>
parents: 977
diff changeset
298 return(0);
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 }