Merge pull request #323 from hycrypt/skip_load_bridge-and-skip_reset-arguments-for-Xilinx-devices

add the skip_load_bridge and skip_reset arguments for Xilinx devices
This commit is contained in:
Gwenhael Goavec-Merou 2023-03-03 11:41:32 +01:00 committed by GitHub
commit 04563c02d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 6 deletions

View File

@ -540,7 +540,7 @@ int main(int argc, char **argv)
if (fab == "xilinx") { if (fab == "xilinx") {
fpga = new Xilinx(jtag, args.bit_file, args.secondary_bit_file, fpga = new Xilinx(jtag, args.bit_file, args.secondary_bit_file,
args.file_type, args.prg_type, args.fpga_part, args.bridge_path, args.file_type, args.prg_type, args.fpga_part, args.bridge_path,
args.target_flash, args.verify, args.verbose); args.target_flash, args.verify, args.verbose, args.skip_load_bridge, args.skip_reset);
} 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.prg_type, args.fpga_part, args.bridge_path, args.verify, args.prg_type, args.fpga_part, args.bridge_path, args.verify,

View File

@ -128,9 +128,11 @@ Xilinx::Xilinx(Jtag *jtag, const std::string &filename,
Device::prog_type_t prg_type, Device::prog_type_t prg_type,
const std::string &device_package, const std::string &spiOverJtagPath, const std::string &device_package, const std::string &spiOverJtagPath,
const std::string &target_flash, const std::string &target_flash,
bool verify, int8_t verbose): bool verify, int8_t verbose,
bool skip_load_bridge, bool skip_reset):
Device(jtag, filename, file_type, verify, verbose), Device(jtag, filename, file_type, verify, verbose),
SPIInterface(filename, verbose, 256, verify), SPIInterface(filename, verbose, 256, verify, skip_load_bridge,
skip_reset),
_device_package(device_package), _spiOverJtagPath(spiOverJtagPath), _device_package(device_package), _spiOverJtagPath(spiOverJtagPath),
_irlen(6), _filename(filename), _secondary_filename(secondary_filename) _irlen(6), _filename(filename), _secondary_filename(secondary_filename)
{ {
@ -434,6 +436,24 @@ void Xilinx::program(unsigned int offset, bool unprotect_flash)
delete bit; delete bit;
} }
bool Xilinx::post_flash_access()
{
if (_skip_reset)
printInfo("Skip resetting device");
else
reset();
return true;
}
bool Xilinx::prepare_flash_access()
{
if (_skip_load_bridge) {
printInfo("Skip loading bridge for spiOverjtag");
return true;
}
return load_bridge();
}
bool Xilinx::load_bridge() bool Xilinx::load_bridge()
{ {
std::string bitname; std::string bitname;

View File

@ -23,7 +23,8 @@ class Xilinx: public Device, SPIInterface {
const std::string &device_package, const std::string &device_package,
const std::string &spiOverJtagPath, const std::string &spiOverJtagPath,
const std::string &target_flash, const std::string &target_flash,
bool verify, int8_t verbose); bool verify, int8_t verbose,
bool skip_load_bridge, bool skip_reset);
~Xilinx(); ~Xilinx();
void program(unsigned int offset, bool unprotect_flash) override; void program(unsigned int offset, bool unprotect_flash) override;
@ -143,11 +144,11 @@ class Xilinx: public Device, SPIInterface {
/*! /*!
* \brief prepare SPI flash access (need to have bridge in RAM) * \brief prepare SPI flash access (need to have bridge in RAM)
*/ */
virtual bool prepare_flash_access() override {return load_bridge();} virtual bool prepare_flash_access() override;
/*! /*!
* \brief end of SPI flash access * \brief end of SPI flash access
*/ */
virtual bool post_flash_access() override {reset(); return true;} virtual bool post_flash_access() override;
private: private:
/* list of xilinx family devices */ /* list of xilinx family devices */