all: propagate verify with a message when not supported
This commit is contained in:
parent
fe0a315456
commit
2af64e9af4
|
|
@ -17,8 +17,8 @@
|
||||||
#define BIT_FOR_FLASH (DATA_DIR "/openFPGALoader/test_sfl.svf")
|
#define BIT_FOR_FLASH (DATA_DIR "/openFPGALoader/test_sfl.svf")
|
||||||
|
|
||||||
Altera::Altera(Jtag *jtag, const std::string &filename,
|
Altera::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):
|
||||||
Device(jtag, filename, file_type, false, verbose), _svf(_jtag, _verbose)
|
Device(jtag, filename, file_type, verify, verbose), _svf(_jtag, _verbose)
|
||||||
{
|
{
|
||||||
if (!_file_extension.empty()) {
|
if (!_file_extension.empty()) {
|
||||||
if (_file_extension == "svf" || _file_extension == "rbf")
|
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);
|
EPCQ epcq(0x403, 0x6010/*_jtag->vid(), _jtag->pid()*/, 2, 6000000);
|
||||||
_svf.parse(BIT_FOR_FLASH);
|
_svf.parse(BIT_FOR_FLASH);
|
||||||
epcq.program(offset, _filename, (_file_extension == "rpd")? true:false);
|
epcq.program(offset, _filename, (_file_extension == "rpd")? true:false);
|
||||||
|
|
||||||
|
if (_verify)
|
||||||
|
printWarn("writing verification not supported");
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
class Altera: public Device {
|
class Altera: public Device {
|
||||||
public:
|
public:
|
||||||
Altera(Jtag *jtag, const std::string &filename,
|
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();
|
~Altera();
|
||||||
|
|
||||||
void programMem();
|
void programMem();
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,8 @@
|
||||||
|
|
||||||
Anlogic::Anlogic(Jtag *jtag, const std::string &filename,
|
Anlogic::Anlogic(Jtag *jtag, const std::string &filename,
|
||||||
const std::string &file_type,
|
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):
|
||||||
Device(jtag, filename, file_type, false, verbose), _svf(_jtag, _verbose)
|
Device(jtag, filename, file_type, verify, verbose), _svf(_jtag, _verbose)
|
||||||
{
|
{
|
||||||
if (!_file_extension.empty()) {
|
if (!_file_extension.empty()) {
|
||||||
if (_file_extension == "svf")
|
if (_file_extension == "svf")
|
||||||
|
|
@ -116,6 +116,9 @@ void Anlogic::program(unsigned int offset)
|
||||||
|
|
||||||
flash.erase_and_prog(offset, data, len);
|
flash.erase_and_prog(offset, data, len);
|
||||||
|
|
||||||
|
if (_verify)
|
||||||
|
printWarn("writing verification not supported");
|
||||||
|
|
||||||
//Loading device with 'bypass' instruction.
|
//Loading device with 'bypass' instruction.
|
||||||
_jtag->shiftIR(BYPASS, IRLENGTH);
|
_jtag->shiftIR(BYPASS, IRLENGTH);
|
||||||
////Loading device with 'refresh' instruction.
|
////Loading device with 'refresh' instruction.
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ class Anlogic: public Device, SPIInterface {
|
||||||
public:
|
public:
|
||||||
Anlogic(Jtag *jtag, const std::string &filename,
|
Anlogic(Jtag *jtag, const std::string &filename,
|
||||||
const std::string &file_type,
|
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();
|
~Anlogic();
|
||||||
|
|
||||||
void program(unsigned int offset = 0) override;
|
void program(unsigned int offset = 0) override;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "display.hpp"
|
||||||
#include "jtag.hpp"
|
#include "jtag.hpp"
|
||||||
|
|
||||||
/* GGM: TODO: program must have an optional
|
/* GGM: TODO: program must have an optional
|
||||||
|
|
@ -33,7 +34,8 @@ class Device {
|
||||||
virtual void program(unsigned int offset = 0) = 0;
|
virtual void program(unsigned int offset = 0) = 0;
|
||||||
virtual bool dumpFlash(const std::string &filename,
|
virtual bool dumpFlash(const std::string &filename,
|
||||||
uint32_t base_addr, uint32_t len) {
|
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 int idCode() = 0;
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,8 @@
|
||||||
Efinix::Efinix(FtdiSpi* spi, const std::string &filename,
|
Efinix::Efinix(FtdiSpi* spi, const std::string &filename,
|
||||||
const std::string &file_type,
|
const std::string &file_type,
|
||||||
uint16_t rst_pin, uint16_t done_pin,
|
uint16_t rst_pin, uint16_t done_pin,
|
||||||
int8_t verbose):
|
bool verify, int8_t verbose):
|
||||||
Device(NULL, filename, file_type, false, verbose), _rst_pin(rst_pin),
|
Device(NULL, filename, file_type, verify, verbose), _rst_pin(rst_pin),
|
||||||
_done_pin(done_pin)
|
_done_pin(done_pin)
|
||||||
{
|
{
|
||||||
_spi = spi;
|
_spi = spi;
|
||||||
|
|
@ -107,6 +107,9 @@ void Efinix::program(unsigned int offset)
|
||||||
flash.read_id();
|
flash.read_id();
|
||||||
flash.erase_and_prog(offset, bit->getData(), bit->getLength() / 8);
|
flash.erase_and_prog(offset, bit->getData(), bit->getLength() / 8);
|
||||||
|
|
||||||
|
if (_verify)
|
||||||
|
printWarn("writing verification not supported");
|
||||||
|
|
||||||
_spi->gpio_set(_rst_pin);
|
_spi->gpio_set(_rst_pin);
|
||||||
usleep(12000);
|
usleep(12000);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class Efinix: public Device {
|
||||||
Efinix(FtdiSpi *spi, const std::string &filename,
|
Efinix(FtdiSpi *spi, const std::string &filename,
|
||||||
const std::string &file_type,
|
const std::string &file_type,
|
||||||
uint16_t rst_pin, uint16_t done_pin,
|
uint16_t rst_pin, uint16_t done_pin,
|
||||||
int8_t verbose);
|
bool verify, int8_t verbose);
|
||||||
~Efinix();
|
~Efinix();
|
||||||
|
|
||||||
void program(unsigned int offset = 0) override;
|
void program(unsigned int offset = 0) override;
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,8 @@ using namespace std;
|
||||||
|
|
||||||
Gowin::Gowin(Jtag *jtag, const string filename, const string &file_type,
|
Gowin::Gowin(Jtag *jtag, const string filename, const string &file_type,
|
||||||
Device::prog_type_t prg_type,
|
Device::prog_type_t prg_type,
|
||||||
int8_t verbose): Device(jtag, filename, file_type, false, verbose),
|
bool verify, int8_t verbose): Device(jtag, filename, file_type,
|
||||||
is_gw1n1(false)
|
verify, verbose), is_gw1n1(false)
|
||||||
{
|
{
|
||||||
_fs = NULL;
|
_fs = NULL;
|
||||||
uint32_t idcode = idCode();
|
uint32_t idcode = idCode();
|
||||||
|
|
@ -155,6 +155,8 @@ void Gowin::programFlash()
|
||||||
/* test status a faire */
|
/* test status a faire */
|
||||||
if (!flashFLASH(data, length))
|
if (!flashFLASH(data, length))
|
||||||
return;
|
return;
|
||||||
|
if (_verify)
|
||||||
|
printWarn("writing verification not supported");
|
||||||
if (!DisableCfg())
|
if (!DisableCfg())
|
||||||
return;
|
return;
|
||||||
wr_rd(RELOAD, NULL, 0, NULL, 0);
|
wr_rd(RELOAD, NULL, 0, NULL, 0);
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class Gowin: public Device {
|
||||||
public:
|
public:
|
||||||
Gowin(Jtag *jtag, std::string filename, const std::string &file_type,
|
Gowin(Jtag *jtag, std::string filename, const std::string &file_type,
|
||||||
Device::prog_type_t prg_type,
|
Device::prog_type_t prg_type,
|
||||||
int8_t verbose);
|
bool verify, int8_t verbose);
|
||||||
~Gowin();
|
~Gowin();
|
||||||
int idCode() override;
|
int idCode() override;
|
||||||
void reset() override;
|
void reset() override;
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@
|
||||||
Ice40::Ice40(FtdiSpi* spi, const std::string &filename,
|
Ice40::Ice40(FtdiSpi* spi, const std::string &filename,
|
||||||
const std::string &file_type,
|
const std::string &file_type,
|
||||||
uint16_t rst_pin, uint16_t done_pin,
|
uint16_t rst_pin, uint16_t done_pin,
|
||||||
int8_t verbose):
|
bool verify, int8_t verbose):
|
||||||
Device(NULL, filename, file_type, false, verbose), _rst_pin(rst_pin),
|
Device(NULL, filename, file_type, verify, verbose), _rst_pin(rst_pin),
|
||||||
_done_pin(done_pin)
|
_done_pin(done_pin)
|
||||||
{
|
{
|
||||||
_spi = spi;
|
_spi = spi;
|
||||||
|
|
@ -88,6 +88,9 @@ void Ice40::program(unsigned int offset)
|
||||||
flash.read_id();
|
flash.read_id();
|
||||||
flash.erase_and_prog(offset, bit.getData(), bit.getLength() / 8);
|
flash.erase_and_prog(offset, bit.getData(), bit.getLength() / 8);
|
||||||
|
|
||||||
|
if (_verify)
|
||||||
|
printWarn("writing verification not supported");
|
||||||
|
|
||||||
_spi->gpio_set(_rst_pin);
|
_spi->gpio_set(_rst_pin);
|
||||||
usleep(12000);
|
usleep(12000);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class Ice40: public Device {
|
||||||
Ice40(FtdiSpi *spi, const std::string &filename,
|
Ice40(FtdiSpi *spi, const std::string &filename,
|
||||||
const std::string &file_type,
|
const std::string &file_type,
|
||||||
uint16_t rst_pin, uint16_t done_pin,
|
uint16_t rst_pin, uint16_t done_pin,
|
||||||
int8_t verbose);
|
bool verify, int8_t verbose);
|
||||||
~Ice40();
|
~Ice40();
|
||||||
|
|
||||||
void program(unsigned int offset = 0) override;
|
void program(unsigned int offset = 0) override;
|
||||||
|
|
|
||||||
13
src/main.cpp
13
src/main.cpp
|
|
@ -181,11 +181,11 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if (board->manufacturer == "efinix") {
|
if (board->manufacturer == "efinix") {
|
||||||
Efinix target(spi, args.bit_file, args.file_type,
|
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);
|
target.program(args.offset);
|
||||||
} else if (board->manufacturer == "lattice") {
|
} else if (board->manufacturer == "lattice") {
|
||||||
Ice40 target(spi, args.bit_file, args.file_type,
|
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);
|
target.program(args.offset);
|
||||||
} else {
|
} else {
|
||||||
RawParser *bit = NULL;
|
RawParser *bit = NULL;
|
||||||
|
|
@ -221,6 +221,9 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
flash.erase_and_prog(args.offset, bit->getData(), bit->getLength()/8);
|
flash.erase_and_prog(args.offset, bit->getData(), bit->getLength()/8);
|
||||||
|
|
||||||
|
if (args.verify)
|
||||||
|
printWarn("writing verification not supported");
|
||||||
|
|
||||||
delete bit;
|
delete bit;
|
||||||
}
|
}
|
||||||
if (board->reset_pin)
|
if (board->reset_pin)
|
||||||
|
|
@ -359,13 +362,13 @@ int main(int argc, char **argv)
|
||||||
args.prg_type, args.fpga_part, args.verify, args.verbose);
|
args.prg_type, args.fpga_part, args.verify, args.verbose);
|
||||||
} else if (fab == "altera") {
|
} else if (fab == "altera") {
|
||||||
fpga = new Altera(jtag, args.bit_file, args.file_type,
|
fpga = new Altera(jtag, args.bit_file, args.file_type,
|
||||||
args.verbose);
|
args.verify, args.verbose);
|
||||||
} else if (fab == "anlogic") {
|
} else if (fab == "anlogic") {
|
||||||
fpga = new Anlogic(jtag, args.bit_file, args.file_type,
|
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") {
|
} else if (fab == "Gowin") {
|
||||||
fpga = new Gowin(jtag, args.bit_file, args.file_type,
|
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") {
|
} else if (fab == "lattice") {
|
||||||
fpga = new Lattice(jtag, args.bit_file, args.file_type,
|
fpga = new Lattice(jtag, args.bit_file, args.file_type,
|
||||||
args.prg_type, args.verify, args.verbose);
|
args.prg_type, args.verify, args.verbose);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue