commit 41830b1ba03bee21a6753a340e6e8e448d3a8b06
parent 390f574f27d029d00f7f500941cd7ae30780b62a
Author: Brian Swetland <swetland@frotz.net>
Date: Fri, 10 Oct 2014 12:57:47 -0700
fpga: make warmboot optional, fix failure to swizzle bitfile
Diffstat:
2 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/fpga.c b/fpga.c
@@ -195,7 +195,15 @@ static int fpga_warm_boot(JTAG *jtag) {
#endif
}
-int fpga_send_bitfile(JTAG *jtag, void *data, u32 sz) {
+int fpga_prepare_bitfile(u8 *data, u32 sz) {
+ u32 n;
+ for (n = 0; n < sz; n++) {
+ data[n] = bitrev(data[n]);
+ }
+ return 0;
+}
+
+int fpga_send_bitfile(JTAG *jtag, void *data, u32 sz, int warmboot) {
u32 n;
if (jtag_enumerate(jtag) < 0) return -1;
@@ -209,17 +217,19 @@ int fpga_send_bitfile(JTAG *jtag, void *data, u32 sz) {
fprintf(stderr, "status: %08x S%d\n", n, STAT_STATE(n));
if (data == NULL) return 0;
- fpga_warm_boot(jtag);
+ if (warmboot) {
+ fpga_warm_boot(jtag);
- //TODO: detect ready via status register
- usleep(100000);
+ //TODO: detect ready via status register
+ usleep(100000);
- n = 0;
- if (fpga_rd_status(jtag, &n)) {
- fprintf(stderr, "error: failed to read status\n");
- return -1;
+ n = 0;
+ if (fpga_rd_status(jtag, &n)) {
+ fprintf(stderr, "error: failed to read status\n");
+ return -1;
+ }
+ fprintf(stderr, "status: %08x S%d\n", n, STAT_STATE(n));
}
- fprintf(stderr, "status: %08x S%d\n", n, STAT_STATE(n));
fprintf(stderr, "fpga: downloading...\n");
jtag_goto(jtag, JTAG_RESET);
diff --git a/zynq.c b/zynq.c
@@ -56,7 +56,8 @@ int usage(void) {
return -1;
}
-int fpga_send_bitfile(JTAG *jtag, void *data, u32 sz);
+int fpga_send_bitfile(JTAG *jtag, void *data, u32 sz, int warmboot);
+int fpga_prepare_bitfile(u8 *data, u32 sz);
int main(int argc, char **argv) {
JTAG *jtag;
@@ -80,7 +81,8 @@ int main(int argc, char **argv) {
fprintf(stderr, "error: could not load '%s'\n", argv[2]);
return -1;
}
- return fpga_send_bitfile(jtag, data, sz);
+ fpga_prepare_bitfile(data, sz);
+ return fpga_send_bitfile(jtag, data, sz, 0);
}
if ((dap = dap_init(jtag, 0x4ba00477)) == NULL) return -1;