all: propagate verify with a message when not supported

This commit is contained in:
Gwenhael Goavec-Merou 2021-06-25 08:58:45 +02:00
parent fe0a315456
commit 2af64e9af4
12 changed files with 40 additions and 21 deletions

View File

@ -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();
}
}

View File

@ -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();

View File

@ -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.

View File

@ -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;

View File

@ -4,6 +4,7 @@
#include <iostream>
#include <string>
#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();

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);