From 1637d6f484d2617bbb46721974c1df31c9d8bdbc Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Sat, 20 Nov 2021 16:57:31 +0100 Subject: [PATCH] lattice: fix REG_STATUS_CNF_CHK_MASK offset: not the same for machXO3D and others --- src/lattice.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lattice.cpp b/src/lattice.cpp index c54bb63..0a0244b 100644 --- a/src/lattice.cpp +++ b/src/lattice.cpp @@ -81,6 +81,7 @@ using namespace std; # define FLASH_UFM_ADDR_UFM3 (1<<13) #define PROG_CFG_FLASH 0x70 /* LSC_PROG_INCR_NV */ #define READ_BUSY_FLAG 0xF0 /* LSC_CHECK_BUSY */ +# define CHECK_BUSY_FLAG_BUSY (1 << 7) /* The busy flag defines bit 7 as busy, but busy flags returns 1 for busy (bit 0). */ #define REG_CFG_FLASH 0x73 /* LSC_READ_INCR_NV */ #define PROG_FEATURE_ROW 0xE4 /* LSC_PROG_FEATURE */ @@ -101,7 +102,8 @@ using namespace std; # define REG_STATUS_PP_UFM (1 << 17) /* Password Protection enabled for all UFM flash sectors 0=Disabled (Default), 1=Enabled */ # define REG_STATUS_AUTH_DONE (1 << 18) /* Authentication done */ # define REG_STATUS_PRI_BOOT_FAIL (1 << 21) /* Primary boot failure (1= Fail) even though secondary boot successful */ -# define REG_STATUS_CNF_CHK_MASK (0x0f << 22) /* Configuration Status Check */ +# define REG_STATUS_CNF_CHK_MASK (0x0f << 23) /* Configuration Status Check */ +# define REG_STATUS_MACHXO3D_CNF_CHK_MASK (0x0f << 22) /* Configuration Status Check */ # define REG_STATUS_EXEC_ERR (1 << 26) /*** NOT specified for MachXO3D ***/ # define REG_STATUS_DEV_VERIFIED (1 << 27) /* I=0 Device verified correct, I=1 Device failed to verify */ #define READ_STATUS_REGISTER_1 0x3D /* LSC_READ_STATUS_1 */ @@ -334,7 +336,13 @@ bool Lattice::program_mem() _jtag->shiftDR(tmp, NULL, size*8, next_state); } - if (checkStatus(0, REG_STATUS_CNF_CHK_MASK)) { + uint32_t status_mask; + if (_fpga_family == MACHXO3D_FAMILY) + status_mask = REG_STATUS_MACHXO3D_CNF_CHK_MASK; + else + status_mask = REG_STATUS_CNF_CHK_MASK; + + if (checkStatus(0, status_mask)) { progress.done(); } else { progress.fail();