diff --git a/src/altera.cpp b/src/altera.cpp index 0415725..51d7ec2 100644 --- a/src/altera.cpp +++ b/src/altera.cpp @@ -101,7 +101,7 @@ void Altera::programMem(RawParser &_bit) int xfer_len = 512; int tx_len; - int tx_end; + Jtag::tapState_t tx_end; for (int i=0; i < byte_length; i+=xfer_len) { if (i + xfer_len > byte_length) { // last packet with some size @@ -352,7 +352,7 @@ void Altera::shiftVIR(uint32_t reg) } void Altera::shiftVDR(uint8_t * tx, uint8_t * rx, uint32_t len, - int end_state, bool debug) + Jtag::tapState_t end_state, bool debug) { (void) debug; uint8_t tx_ir[2] = {USER0, 0}; diff --git a/src/altera.hpp b/src/altera.hpp index 1c359d0..1e40aa9 100644 --- a/src/altera.hpp +++ b/src/altera.hpp @@ -98,7 +98,7 @@ class Altera: public Device, SPIInterface { * \param[in] end_state: next state at the end of xfer */ void shiftVDR(uint8_t * tx, uint8_t * rx, uint32_t len, - int end_state = Jtag::UPDATE_DR, bool debug = false); + Jtag::tapState_t end_state = Jtag::UPDATE_DR, bool debug = false); std::string _device_package; std::string _spiOverJtagPath; /**< spiOverJtag explicit path */ diff --git a/src/anlogic.cpp b/src/anlogic.cpp index 19856c8..f70314b 100644 --- a/src/anlogic.cpp +++ b/src/anlogic.cpp @@ -113,7 +113,7 @@ void Anlogic::program(unsigned int offset, bool unprotect_flash) const uint8_t *ptr = data; while (len > 0) { int xfer_len = (len > 512)?512:len; - int tx_end; + Jtag::tapState_t tx_end; if (len - xfer_len == 0) tx_end = Jtag::RUN_TEST_IDLE; else diff --git a/src/efinix.cpp b/src/efinix.cpp index 63cfbc0..267eeb8 100644 --- a/src/efinix.cpp +++ b/src/efinix.cpp @@ -291,7 +291,8 @@ void Efinix::programSPI(unsigned int offset, const uint8_t *data, void Efinix::programJTAG(const uint8_t *data, const int length) { - int xfer_len = 512, tx_end; + int xfer_len = 512; + Jtag::tapState_t tx_end; uint8_t tx[512]; if (_fpga_family == TITANIUM_FAMILY) diff --git a/src/gowin.cpp b/src/gowin.cpp index 1706d15..7568927 100644 --- a/src/gowin.cpp +++ b/src/gowin.cpp @@ -632,7 +632,8 @@ bool Gowin::connectJtagToMCU() /* TN653 p. 9 */ bool Gowin::flashSRAM(const uint8_t *data, int length) { - int tx_len, tx_end; + int tx_len; + Jtag::tapState_t tx_end; int byte_length = length / 8; ProgressBar progress("Flash SRAM", byte_length, 50, _quiet); diff --git a/src/jtag.cpp b/src/jtag.cpp index 1bd8d7d..65c9145 100644 --- a/src/jtag.cpp +++ b/src/jtag.cpp @@ -317,7 +317,7 @@ void Jtag::toggleClk(int nb) return; } -int Jtag::shiftDR(const uint8_t *tdi, unsigned char *tdo, int drlen, int end_state) +int Jtag::shiftDR(const uint8_t *tdi, unsigned char *tdo, int drlen, tapState_t end_state) { /* get number of devices in the JTAG chain * after the selected one @@ -370,7 +370,7 @@ int Jtag::shiftDR(const uint8_t *tdi, unsigned char *tdo, int drlen, int end_sta return 0; } -int Jtag::shiftIR(unsigned char tdi, int irlen, int end_state) +int Jtag::shiftIR(unsigned char tdi, int irlen, tapState_t end_state) { if (irlen > 8) { cerr << "Error: this method this direct char don't support more than 1 byte" << endl; @@ -379,7 +379,7 @@ int Jtag::shiftIR(unsigned char tdi, int irlen, int end_state) return shiftIR(&tdi, NULL, irlen, end_state); } -int Jtag::shiftIR(unsigned char *tdi, unsigned char *tdo, int irlen, int end_state) +int Jtag::shiftIR(unsigned char *tdi, unsigned char *tdo, int irlen, tapState_t end_state) { display("%s: avant shiftIR\n", __func__); int bypass_after = 0; diff --git a/src/jtag.hpp b/src/jtag.hpp index aaddedd..91190ce 100644 --- a/src/jtag.hpp +++ b/src/jtag.hpp @@ -67,22 +67,6 @@ class Jtag { * \return a pointer instance of JtagInterface */ JtagInterface *get_ll_class() {return _jtag;} - - int shiftIR(unsigned char *tdi, unsigned char *tdo, int irlen, - int end_state = RUN_TEST_IDLE); - int shiftIR(unsigned char tdi, int irlen, - int end_state = RUN_TEST_IDLE); - int shiftDR(const uint8_t *tdi, unsigned char *tdo, int drlen, - int end_state = RUN_TEST_IDLE); - int read_write(const uint8_t *tdi, unsigned char *tdo, int len, char last); - - void toggleClk(int nb); - void go_test_logic_reset(); - void set_state(int newState); - int flushTMS(bool flush_buffer = false); - void flush() {flushTMS(); _jtag->flush();} - void setTMS(unsigned char tms); - enum tapState_t { TEST_LOGIC_RESET = 0, RUN_TEST_IDLE = 1, @@ -102,6 +86,22 @@ class Jtag { UPDATE_IR = 15, UNKNOWN = 999 }; + + int shiftIR(unsigned char *tdi, unsigned char *tdo, int irlen, + Jtag::tapState_t end_state = RUN_TEST_IDLE); + int shiftIR(unsigned char tdi, int irlen, + Jtag::tapState_t end_state = RUN_TEST_IDLE); + int shiftDR(const uint8_t *tdi, unsigned char *tdo, int drlen, + Jtag::tapState_t end_state = RUN_TEST_IDLE); + int read_write(const uint8_t *tdi, unsigned char *tdo, int len, char last); + + void toggleClk(int nb); + void go_test_logic_reset(); + void set_state(int newState); + int flushTMS(bool flush_buffer = false); + void flush() {flushTMS(); _jtag->flush();} + void setTMS(unsigned char tms); + const char *getStateName(tapState_t s); /* utilities */ diff --git a/src/lattice.cpp b/src/lattice.cpp index 8ddf7b5..01ea945 100644 --- a/src/lattice.cpp +++ b/src/lattice.cpp @@ -338,7 +338,7 @@ bool Lattice::program_mem() uint8_t tmp[1024]; int size = 1024; - int next_state = Jtag::SHIFT_DR; + Jtag::tapState_t next_state = Jtag::SHIFT_DR; ProgressBar progress("Loading", length, 50, _quiet); @@ -433,7 +433,7 @@ bool Lattice::program_intFlash(ConfigBitstreamParser *_cbp) if(ufm_start > 2045) { printError("UFM section detected in JEDEC file, but " - "calculated flash start address was out of bounds"); + "calculated flash start address was out of bounds"); return false; } } else if (note == "END CONFIG DATA") { @@ -1308,7 +1308,7 @@ uint16_t Lattice::getUFMStartPageFromJEDEC(JedParser *_jed, int id) addres. TODO: In any case, JEDEC files don't carry part information. Verify against IDCODE read previously? */ - + if(raw_page_offset > 9211) { return raw_page_offset - 9211 - 1; // 7000 } else if(raw_page_offset > 5758) { diff --git a/src/svf_jtag.cpp b/src/svf_jtag.cpp index a5334cf..a971b75 100644 --- a/src/svf_jtag.cpp +++ b/src/svf_jtag.cpp @@ -245,13 +245,13 @@ void SVF_jtag::handle_instruction(vector const &vstr) if (_verbose) cout << "trst value : " << vstr[1] << endl; } else if (!vstr[0].compare("ENDDR")) { if (_verbose) cout << "enddr value : " << vstr[1] << endl; - _enddr = fsm_state[vstr[1]]; + _enddr = (Jtag::tapState_t)fsm_state[vstr[1]]; } else if (!vstr[0].compare("ENDIR")) { if (_verbose) cout << "endir value : " << vstr[1] << endl; - _endir = fsm_state[vstr[1]]; + _endir = (Jtag::tapState_t)fsm_state[vstr[1]]; } else if (!vstr[0].compare("STATE")) { if (_verbose) cout << "state value : " << vstr[1] << endl; - _jtag->set_state(fsm_state[vstr[1]]); + _jtag->set_state((Jtag::tapState_t)fsm_state[vstr[1]]); } else if (!vstr[0].compare("RUNTEST")) { parse_runtest(vstr); } else if (!vstr[0].compare("HIR")) { @@ -284,7 +284,7 @@ void SVF_jtag::handle_instruction(vector const &vstr) parse_XYR(vstr, sir); if (_verbose) { for (auto &&t : vstr) - cout << t << " "; + cout << t << " "; cout << endl; cout << "\tlen : " << sir.len << endl; cout << "\ttdo : " << sir.tdo.size()*4 << endl; @@ -335,7 +335,7 @@ void SVF_jtag::handle_instruction(vector const &vstr) } SVF_jtag::SVF_jtag(Jtag *jtag, bool verbose):_verbose(verbose), _freq_hz(0), - _enddr(fsm_state["IDLE"]), _endir(fsm_state["IDLE"]), + _enddr((Jtag::tapState_t)fsm_state["IDLE"]), _endir((Jtag::tapState_t)fsm_state["IDLE"]), _run_state(fsm_state["IDLE"]), _end_state(fsm_state["IDLE"]) { diff --git a/src/svf_jtag.hpp b/src/svf_jtag.hpp index d5d916e..b5164ab 100644 --- a/src/svf_jtag.hpp +++ b/src/svf_jtag.hpp @@ -58,8 +58,8 @@ class SVF_jtag { bool _verbose; uint32_t _freq_hz; - int _enddr; - int _endir; + Jtag::tapState_t _enddr; + Jtag::tapState_t _endir; int _run_state; int _end_state; svf_XYR hdr; diff --git a/src/xilinx.cpp b/src/xilinx.cpp index 7d2c473..e2ac32a 100644 --- a/src/xilinx.cpp +++ b/src/xilinx.cpp @@ -571,7 +571,8 @@ void Xilinx::program_mem(ConfigBitstreamParser *bitfile) /* GGM: TODO */ int byte_length = bitfile->getLength() / 8; const uint8_t *data = bitfile->getData(); - int tx_len, tx_end; + int tx_len; + Jtag::tapState_t tx_end; int burst_len = byte_length / 100; ProgressBar progress("Flash SRAM", byte_length, 50, _quiet); @@ -728,7 +729,8 @@ bool Xilinx::xc3s_flow_program(ConfigBitstreamParser *bit) int byte_length = bit->getLength() / 8; int burst_len = byte_length / 100; const uint8_t *data = bit->getData(); - int tx_len = burst_len * 8, tx_end = Jtag::SHIFT_DR; + int tx_len = burst_len * 8; + Jtag::tapState_t tx_end = Jtag::SHIFT_DR; ProgressBar progress("Flash SRAM", byte_length, 50, _quiet); flow_enable(); @@ -1081,7 +1083,7 @@ bool Xilinx::xcf_program(ConfigBitstreamParser *bitfile) uint32_t data_len = bitfile->getLength() / 8; uint32_t xfer_len, offset = 0; uint32_t addr = 0; - int xfer_end; + Jtag::tapState_t xfer_end; /* limit JTAG clock frequency to 15MHz */ if (_jtag->getClkFreq() > 15e6)