lattice: update define, pass data array instead of _jed to Verify method, fix wrong index use

This commit is contained in:
Gwenhael Goavec-Merou 2020-04-27 16:37:05 +02:00
parent 9d8c528c35
commit 56a81c1d68
2 changed files with 10 additions and 8 deletions

View File

@ -47,6 +47,7 @@ using namespace std;
# define CHECK_BUSY_FLAG_BUSY (1 << 7)
#define RESET_CFG_ADDR 0x46
#define PROG_CFG_FLASH 0x70
#define REG_CFG_FLASH 0x73
#define PROG_FEATURE_ROW 0xE4
#define PROG_FEABITS 0xF8
#define PROG_DONE 0x5E
@ -274,7 +275,8 @@ bool Lattice::program_intFlash()
/* bypass */
wr_rd(0xff, NULL, 0, NULL, 0);
/* ISC Enable 0xC6 followed by 0x08 */
/* ISC Enable 0xC6 followed by
* 0x08 (Enable nVCM/Flash Normal mode */
printInfo("Enable configuration: ", false);
if (!EnableISC(0x08)) {
printError("FAIL");
@ -317,10 +319,11 @@ bool Lattice::program_intFlash()
_jtag->set_state(Jtag::RUN_TEST_IDLE);
_jtag->toggleClk(1000);
/* flash UFM */
/* flash CfgFlash */
if (false == flashProg(0, cfg_data))
return false;
if (Verify(_jed) == false)
/* verify write */
if (Verify(cfg_data) == false)
return false;
/* missing usercode update */
@ -760,7 +763,7 @@ bool Lattice::flashProg(uint32_t start_addr, std::vector<std::string> data)
return true;
}
bool Lattice::Verify(JedParser &_jed, bool unlock)
bool Lattice::Verify(std::vector<std::string> data, bool unlock)
{
uint8_t tx_buf[16], rx_buf[16];
if (unlock)
@ -770,18 +773,17 @@ bool Lattice::Verify(JedParser &_jed, bool unlock)
_jtag->set_state(Jtag::RUN_TEST_IDLE);
_jtag->toggleClk(1000);
tx_buf[0] = 0x73;
tx_buf[0] = REG_CFG_FLASH;
_jtag->shiftIR(tx_buf, NULL, 8, Jtag::PAUSE_IR);
bzero(tx_buf, 16);
bool failure = false;
vector<string> data = _jed.data_for_section(0);
ProgressBar progress("Verifying", data.size(), 50);
for (size_t line = 0; line< data.size(); line++) {
_jtag->set_state(Jtag::RUN_TEST_IDLE);
_jtag->toggleClk(2);
_jtag->shiftDR(tx_buf, rx_buf, 16*8, Jtag::PAUSE_DR);
for (size_t i = 0; i < data[i].size(); i++) {
for (size_t i = 0; i < data[line].size(); i++) {
if (rx_buf[i] != (unsigned char)data[line][i]) {
printf("%3ld %3ld %02x -> %02x\n", line, i,
rx_buf[i], (unsigned char)data[line][i]);

View File

@ -39,7 +39,7 @@ class Lattice: public Device, SPIInterface {
void program(unsigned int offset) override;
bool program_mem();
bool program_flash(unsigned int offset);
bool Verify(JedParser &_jed, bool unlock = false);
bool Verify(std::vector<std::string> data, bool unlock = false);
/* spi interface */
int spi_put(uint8_t cmd, uint8_t *tx, uint8_t *rx,