Status Registers to Find Correctable and Uncorrectable Errors
In HW manager, under DDRMC* ecc, the following status registers can be observed:
Note: Refresh
the respective DDRMC to reflect the current status.
- DDRMC_ISR_CE0_ECC0
- DDRMC_ISR_CE0_ECC1
- DDRMC_ISR_CE1_ECC0
- DDRMC_ISR_CE1_ECC1
- DDRMC_ISR_UC0_ECC0
- DDRMC_ISR_UC0_ECC1
- DDRMC_ISR_UC1_ECC0
- DDRMC_ISR_UC1_ECC1
- In the above status registers, the first 0 or 1 (
CE*andUC*) indicates which half of the BLn burst contained an error, and the last 0 or 1 (ECC*) indicates the DDRMC channel number containing an error. - When one or more errors are injected, HW will set the
reg_adec15.donebit to0x1under DDRMC_NOC* registers. - In persistent mode, errors will continue to be injected after the done bit is set.
- In single mode (
persistent=0x0) the done bit must be cleared to enable another single error injection. - During correctable error detection DRAM will be scrubbed.
- During uncorrectable error detection SLVERR Read response will be returned to the host.
Decoding DDRMC ECC Errors
ECC error checking is done on every edge of the memory burst, either BL8 for DDR4, or BL16 for LPDDR4. ECC error reporting is done on an aligned two burst boundary for x72 DDR4 and an aligned four burst boundary for all other memory configurations. The eccr[1:0]_corr/uncorr_err_status registers indicate the memory bursts associated with the ECC errors. This burst mapping also depends on the memory technology and interface width. The following tables show the correctable and uncorrectable burst mapping possibilities.
| Burstn | DDR4 x72 | All Other DDR4 Per Channel |
|---|---|---|
| Burst0 | ecc0_[corr/uncorr]_err_status_00 | ecc[1:0]_[corr/uncorr]_err_status_00 |
| Burst1 | ecc0_[corr/uncorr]_err_status_02 | ecc[1:0]_[corr/uncorr]_err_status_01 |
| Burst2 | ecc1_[corr/uncorr]_err_status_00 | ecc[1:0]_[corr/uncorr]_err_status_02 |
| Burst3 | ecc1_[corr/uncorr]_err_status_02 | ecc[1:0]_[corr/uncorr]_err_status_03 |
| Burst4 | ecc0_[corr/uncorr]_err_status_10 | ecc[1:0]_[corr/uncorr]_err_status_10 |
| Burst5 | ecc0_[corr/uncorr]_err_status_12 | ecc[1:0]_[corr/uncorr]_err_status_11 |
| Burst6 | ecc1_[corr/uncorr]_err_status_10 | ecc[1:0]_[corr/uncorr]_err_status_12 |
| Burst7 | ecc1_[corr/uncorr]_err_status_12 | ecc[1:0]_[corr/uncorr]_err_status_13 |
| Burst8 | N/A | N/A |
| Burst9 | N/A | N/A |
| Burst10 | N/A | N/A |
| Burst11 | N/A | N/A |
| Burst12 | N/A | N/A |
| Burst13 | N/A | N/A |
| Burst14 | N/A | N/A |
| Burst15 | N/A | N/A |
| Burstn | All LPDDR4 Per Channel |
|---|---|
| Burst0 | ecc[1:0]_[corr/uncorr]_err_status_00 |
| Burst1 | ecc[1:0]_[corr/uncorr]_err_status_01 |
| Burst2 | ecc[1:0]_[corr/uncorr]_err_status_02 |
| Burst3 | ecc[1:0]_[corr/uncorr]_err_status_03 |
| Burst4 | ecc[1:0]_[corr/uncorr]_err_status_10 |
| Burst5 | ecc[1:0]_[corr/uncorr]_err_status_11 |
| Burst6 | ecc[1:0]_[corr/uncorr]_err_status_12 |
| Burst7 | ecc[1:0]_[corr/uncorr]_err_status_13 |
| Burst8 | ecc[1:0]_[corr/uncorr]_err_status_00 |
| Burst9 | ecc[1:0]_[corr/uncorr]_err_status_01 |
| Burst10 | ecc[1:0]_[corr/uncorr]_err_status_02 |
| Burst11 | ecc[1:0]_[corr/uncorr]_err_status_03 |
| Burst12 | ecc[1:0]_[corr/uncorr]_err_status_10 |
| Burst13 | ecc[1:0]_[corr/uncorr]_err_status_11 |
| Burst14 | ecc[1:0]_[corr/uncorr]_err_status_12 |
| Burst15 | ecc[1:0]_[corr/uncorr]_err_status_13 |
For information refer to AR 000034749.