ELM
In all other cases, the engine goes through the entire error-location process. Each time an error-location is
found, it is logged in the associated ECC_ERROR_LOCATION bit field. The first error detected is logged
in the ELM_ERROR_LOCATION_0_i[12:0] ECC_ERROR_LOCATION bit field; the second in the
ELM_ERROR_LOCATION_1_i[12:0] ECC_ERROR_LOCATION bit field, and so on.
Table 7-167. ELM_LOCATION_STATUS_i Value Decoding Table
ECC_CORRECT
ECC_NB_ERRORS
Status
Number of Errors
Action Required
ABLE Value
Value
Detected
1
0
OK
0
None
1
≠
0
OK
ECC_NB_ERRORS
Correct the data buffer read based on the
ELM_ERROR_LOCATION_0_i to
ELM_ERROR_LOCATION_15_i results.
0
Any
Failed
Unknown
Software-dependant
7.4.3.6
Processing Completion
When the processing for a given syndrome polynomial completes, its
ELM_SYNDROME_FRAGMENT_6_i[16] SYNDROME_VALID bit is reset. It must not be set again until
the exit status registers, ELM_LOCATION_STATUS_i (i = 0 to 7), for this processing are checked. Failure
to comply with this rule leads to potential loss of the first polynomial process data output.
The error-location engine signals the process completion to the ELM. When this event is detected, the
corresponding ELM_IRQSTATUS[i] LOC_VALID_i bit is set (i = 0 to 7). The processing-exit status is
available from the associated ELM_LOCATION_STATUS_i register, and error locations are stored in order
in the ECC_ERROR_LOCATION fields. The software must only read valid error-location registers based
on the number of errors detected and located.
Immediately after the error-location engine completes, a new syndrome polynomial can be processed, if
any is available, as reported by the ELM_SYNDROME_FRAGMENT_6_i[16] SYNDROME_VALID validity
bit, depending on the configured error-correction level. If several syndrome polynomials are available, a
round-robin arbitration is used to select one for processing.
In continuous mode (that is, all bits in ELM_PAGE_CTRL are reset), an interrupt is triggered whenever a
ELM_IRQSTATUS[i] LOC_VALID_i bit is asserted. The CPU must read the ELM_IRQSTATUS register to
determine which polynomial is processed and retrieve the exit status and error locations
(ELM_LOCATION_STATUS_i and ELM_ERROR_LOCATION_0_i to ELM_ERROR_LOCATION_15_i).
When done, the CPU must clear the corresponding ELM_IRQSTATUS[i] LOC_VALID_i bit by writing it to
1. Other status bits must be written to 0 so that other interrupts are not unintentionally cleared. When
using this mode, the ELM_IRQSTATUS[8] PAGE_VALID interrupt is never triggered.
In page mode, the module does not trigger interrupts for the processing completion of each polynomial
because the ELM_IRQENABLE[i] LOCATION_MASK_i bits are cleared. A page is defined using the
ELM_PAGE_CTRL register. Each SECTOR_i bit set means the corresponding polynomial i is part of the
page processing. A page is fully processed when all tagged polynomials have been processed, as logged
in the ELM_IRQSTATUS[i] LOC_VALID_i bit fields. The module triggers an ELM_IRQSTATUS[8]
PAGE_VALID interrupt whenever it detects that the full page has been processed. To make sure the next
page can be correctly processed, all status bits in the ELM_IRQSTATUS register must be cleared by
using a single atomic-write access.
NOTE:
Do not modify page setting parameters in the ELM_PAGE_CTRL register unless the engine
is idle, no polynomial input is valid, and all interrupts have been cleared.
Because no polynomial-level interrupt is triggered in page mode, polynomials cleared in the
ELM_PAGE_CTRL[i] SECTOR_i bit fields (i = 0 to 7) are processed as usual, but are essentially ignored.
The CPU must manually poll the ELM_IRQSTATUS bits to check for their status.
480
Memory Subsystem
SPRUH73H – October 2011 – Revised April 2013
Copyright © 2011–2013, Texas Instruments Incorporated