The software might trigger an abort that can lead to the ecc_last_status value being incorrectly shown for one cycle after the ecc_status bit has gone Low.
The software must re-read the ecc_last_status whenever it detects a non-zero value.
|Impact:||Trivial, re-read ECC status, as necessary.|
|Work-around:||If software reads a non-zero value from the ecc_last_status bits of the ecc_status register, then the value in the ecc_status register must be read for a second time to ensure the correct value is returned.|
|Configurations Affected:||Systems that use ECC with NAND.|
|Device Revision(s) Affected:||All, no plan to fix. See (Xilinx Answer 47916) - Zynq-7000 SoC Silicon Revision Differences|
The ecc_status register contains a 2-bit ecc_last_status value that reports the success or failure of the previous ECC operation. The ecc_last_status value is only valid once the ecc_status bit in the same register has gone low, indicating the ECC is idle. All the failure modes reported in ecc_last_status are due to software errors where the software has made a mistake:
If the driver makes one of the above mistakes, the abort code is correctly reported. However, if it then performs a successful sequence, the ecc_last_status value will incorrectly show the same abort for 1 cycle after ecc_status bit has gone Low.
During normal operation, it is not expected that the NAND software will ever cause any of the abort codes reported by the ecc_last_status bits. Only false failures (never false passes) can be reported as a result of this issue so there are no-implications for data-integrity or for ECC operation when the data is read back.
The implications will come from how the softwarereacts to the abort code. However, suitable error handling must be in place as this errata can only occur after a real abort has occurred and been dealt with by software.
If software reads a non-zero value from the ecc_last_status bits of the ecc_status register then the value in the ecc_status register must be read for a second time to ensure the correct value is returned.