From 2af64e9af4a457d75aaade982121da384df3f494 Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Fri, 25 Jun 2021 08:58:45 +0200 Subject: [PATCH] all: propagate verify with a message when not supported --- src/altera.cpp | 7 +++++-- src/altera.hpp | 2 +- src/anlogic.cpp | 7 +++++-- src/anlogic.hpp | 2 +- src/device.hpp | 4 +++- src/efinix.cpp | 7 +++++-- src/efinix.hpp | 2 +- src/gowin.cpp | 6 ++++-- src/gowin.hpp | 2 +- src/ice40.cpp | 7 +++++-- src/ice40.hpp | 2 +- src/main.cpp | 13 ++++++++----- 12 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/altera.cpp b/src/altera.cpp index 7a135b2..14ed6a9 100644 --- a/src/altera.cpp +++ b/src/altera.cpp @@ -17,8 +17,8 @@ #define BIT_FOR_FLASH (DATA_DIR "/openFPGALoader/test_sfl.svf") Altera::Altera(Jtag *jtag, const std::string &filename, - const std::string &file_type, int8_t verbose): - Device(jtag, filename, file_type, false, verbose), _svf(_jtag, _verbose) + const std::string &file_type, bool verify, int8_t verbose): + Device(jtag, filename, file_type, verify, verbose), _svf(_jtag, _verbose) { if (!_file_extension.empty()) { if (_file_extension == "svf" || _file_extension == "rbf") @@ -140,6 +140,9 @@ void Altera::program(unsigned int offset) EPCQ epcq(0x403, 0x6010/*_jtag->vid(), _jtag->pid()*/, 2, 6000000); _svf.parse(BIT_FOR_FLASH); epcq.program(offset, _filename, (_file_extension == "rpd")? true:false); + + if (_verify) + printWarn("writing verification not supported"); reset(); } } diff --git a/src/altera.hpp b/src/altera.hpp index 68baf5e..105246d 100644 --- a/src/altera.hpp +++ b/src/altera.hpp @@ -10,7 +10,7 @@ class Altera: public Device { public: Altera(Jtag *jtag, const std::string &filename, - const std::string &file_type, int8_t verbose); + const std::string &file_type, bool verify, int8_t verbose); ~Altera(); void programMem(); diff --git a/src/anlogic.cpp b/src/anlogic.cpp index 4a29661..7f4af2c 100644 --- a/src/anlogic.cpp +++ b/src/anlogic.cpp @@ -39,8 +39,8 @@ Anlogic::Anlogic(Jtag *jtag, const std::string &filename, const std::string &file_type, - Device::prog_type_t prg_type, int8_t verbose): - Device(jtag, filename, file_type, false, verbose), _svf(_jtag, _verbose) + Device::prog_type_t prg_type, bool verify, int8_t verbose): + Device(jtag, filename, file_type, verify, verbose), _svf(_jtag, _verbose) { if (!_file_extension.empty()) { if (_file_extension == "svf") @@ -116,6 +116,9 @@ void Anlogic::program(unsigned int offset) flash.erase_and_prog(offset, data, len); + if (_verify) + printWarn("writing verification not supported"); + //Loading device with 'bypass' instruction. _jtag->shiftIR(BYPASS, IRLENGTH); ////Loading device with 'refresh' instruction. diff --git a/src/anlogic.hpp b/src/anlogic.hpp index 0031227..f091ba6 100644 --- a/src/anlogic.hpp +++ b/src/anlogic.hpp @@ -30,7 +30,7 @@ class Anlogic: public Device, SPIInterface { public: Anlogic(Jtag *jtag, const std::string &filename, const std::string &file_type, - Device::prog_type_t prg_type, int8_t verbose); + Device::prog_type_t prg_type, bool verify, int8_t verbose); ~Anlogic(); void program(unsigned int offset = 0) override; diff --git a/src/device.hpp b/src/device.hpp index e03bfa9..0cafc27 100644 --- a/src/device.hpp +++ b/src/device.hpp @@ -4,6 +4,7 @@ #include #include +#include "display.hpp" #include "jtag.hpp" /* GGM: TODO: program must have an optional @@ -33,7 +34,8 @@ class Device { virtual void program(unsigned int offset = 0) = 0; virtual bool dumpFlash(const std::string &filename, uint32_t base_addr, uint32_t len) { - (void)filename; (void) base_addr; (void) len; return false;} + (void)filename; (void) base_addr; (void) len; + printError("dump flash not supported"); return false;} virtual int idCode() = 0; virtual void reset(); diff --git a/src/efinix.cpp b/src/efinix.cpp index d7c6dd6..2f5493b 100644 --- a/src/efinix.cpp +++ b/src/efinix.cpp @@ -33,8 +33,8 @@ Efinix::Efinix(FtdiSpi* spi, const std::string &filename, const std::string &file_type, uint16_t rst_pin, uint16_t done_pin, - int8_t verbose): - Device(NULL, filename, file_type, false, verbose), _rst_pin(rst_pin), + bool verify, int8_t verbose): + Device(NULL, filename, file_type, verify, verbose), _rst_pin(rst_pin), _done_pin(done_pin) { _spi = spi; @@ -107,6 +107,9 @@ void Efinix::program(unsigned int offset) flash.read_id(); flash.erase_and_prog(offset, bit->getData(), bit->getLength() / 8); + if (_verify) + printWarn("writing verification not supported"); + _spi->gpio_set(_rst_pin); usleep(12000); diff --git a/src/efinix.hpp b/src/efinix.hpp index 62de308..55262a4 100644 --- a/src/efinix.hpp +++ b/src/efinix.hpp @@ -28,7 +28,7 @@ class Efinix: public Device { Efinix(FtdiSpi *spi, const std::string &filename, const std::string &file_type, uint16_t rst_pin, uint16_t done_pin, - int8_t verbose); + bool verify, int8_t verbose); ~Efinix(); void program(unsigned int offset = 0) override; diff --git a/src/gowin.cpp b/src/gowin.cpp index ab5c36b..e76366d 100644 --- a/src/gowin.cpp +++ b/src/gowin.cpp @@ -71,8 +71,8 @@ using namespace std; Gowin::Gowin(Jtag *jtag, const string filename, const string &file_type, Device::prog_type_t prg_type, - int8_t verbose): Device(jtag, filename, file_type, false, verbose), - is_gw1n1(false) + bool verify, int8_t verbose): Device(jtag, filename, file_type, + verify, verbose), is_gw1n1(false) { _fs = NULL; uint32_t idcode = idCode(); @@ -155,6 +155,8 @@ void Gowin::programFlash() /* test status a faire */ if (!flashFLASH(data, length)) return; + if (_verify) + printWarn("writing verification not supported"); if (!DisableCfg()) return; wr_rd(RELOAD, NULL, 0, NULL, 0); diff --git a/src/gowin.hpp b/src/gowin.hpp index ab29f9c..bba6831 100644 --- a/src/gowin.hpp +++ b/src/gowin.hpp @@ -32,7 +32,7 @@ class Gowin: public Device { public: Gowin(Jtag *jtag, std::string filename, const std::string &file_type, Device::prog_type_t prg_type, - int8_t verbose); + bool verify, int8_t verbose); ~Gowin(); int idCode() override; void reset() override; diff --git a/src/ice40.cpp b/src/ice40.cpp index 56bb6ed..d12e136 100644 --- a/src/ice40.cpp +++ b/src/ice40.cpp @@ -32,8 +32,8 @@ Ice40::Ice40(FtdiSpi* spi, const std::string &filename, const std::string &file_type, uint16_t rst_pin, uint16_t done_pin, - int8_t verbose): - Device(NULL, filename, file_type, false, verbose), _rst_pin(rst_pin), + bool verify, int8_t verbose): + Device(NULL, filename, file_type, verify, verbose), _rst_pin(rst_pin), _done_pin(done_pin) { _spi = spi; @@ -88,6 +88,9 @@ void Ice40::program(unsigned int offset) flash.read_id(); flash.erase_and_prog(offset, bit.getData(), bit.getLength() / 8); + if (_verify) + printWarn("writing verification not supported"); + _spi->gpio_set(_rst_pin); usleep(12000); diff --git a/src/ice40.hpp b/src/ice40.hpp index a28097e..8fdcaae 100644 --- a/src/ice40.hpp +++ b/src/ice40.hpp @@ -28,7 +28,7 @@ class Ice40: public Device { Ice40(FtdiSpi *spi, const std::string &filename, const std::string &file_type, uint16_t rst_pin, uint16_t done_pin, - int8_t verbose); + bool verify, int8_t verbose); ~Ice40(); void program(unsigned int offset = 0) override; diff --git a/src/main.cpp b/src/main.cpp index f71ea9b..017efdb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -181,11 +181,11 @@ int main(int argc, char **argv) if (board->manufacturer == "efinix") { Efinix target(spi, args.bit_file, args.file_type, - board->reset_pin, board->done_pin, args.verbose); + board->reset_pin, board->done_pin, args.verify, args.verbose); target.program(args.offset); } else if (board->manufacturer == "lattice") { Ice40 target(spi, args.bit_file, args.file_type, - board->reset_pin, board->done_pin, args.verbose); + board->reset_pin, board->done_pin, args.verify, args.verbose); target.program(args.offset); } else { RawParser *bit = NULL; @@ -221,6 +221,9 @@ int main(int argc, char **argv) flash.erase_and_prog(args.offset, bit->getData(), bit->getLength()/8); + if (args.verify) + printWarn("writing verification not supported"); + delete bit; } if (board->reset_pin) @@ -359,13 +362,13 @@ int main(int argc, char **argv) args.prg_type, args.fpga_part, args.verify, args.verbose); } else if (fab == "altera") { fpga = new Altera(jtag, args.bit_file, args.file_type, - args.verbose); + args.verify, args.verbose); } else if (fab == "anlogic") { fpga = new Anlogic(jtag, args.bit_file, args.file_type, - args.prg_type, args.verbose); + args.prg_type, args.verify, args.verbose); } else if (fab == "Gowin") { fpga = new Gowin(jtag, args.bit_file, args.file_type, - args.prg_type, args.verbose); + args.prg_type, args.verify, args.verbose); } else if (fab == "lattice") { fpga = new Lattice(jtag, args.bit_file, args.file_type, args.prg_type, args.verify, args.verbose);