For diagnostics of safety mechanisms,
ECC logic needs to be checked periodically. However, running test-of-diagnostics in
software to check ECC logic is time consuming as many patterns have to be run to get
to the required coverage. To enable seamless diagnostics, self-test logic is
added.
The self-test controller generates
test sequences to detect faults in ECC logic. Any errors found as part of the test
sequences is logged into self-test configuration registers that are part of the PIPE
module. Different data patterns can be required to get additional coverage. The
input data and ECC values to the ECC logic is programmable through self-test
registers.
If at any point the software reads the
INT_VECT_ADDR registers to perform ECC checks on the read vector address value, any
enabled self-test sequences are paused. Software is required to continually poll for
the completion status of the self-test sequences to account for such pauses.
The self-test controller can run the
following test sequences, see Figure 5-4, to detect an error in ECC logic:
- Positive check: Input pattern
(Data, Address, ECC bits) that is written does not result in ECC errors. No
errors are generated by the ECC logic when none are expected.
- 1-bit error check: Single bit
errors are induced sequentially and then checked for the expected
correctable error.
- 2-bit error check: Double bit
errors are induced sequentially and then checked for the expected
uncorrectable error.
If any of these checks fails, then
self-test execution is aborted. The SELFTEST_DIAG_STATUS register can be read to
check for these errors.
Refer to the following programming sequence for using the self-test
controller:
- Enable self-test controller
(SELFTEST_DIAG_CONTROL. DIAG_TEST_EN = 0x11).
- Write the input data pattern to
be used for self-test
- Write input pattern to
SELFTEST_DIAG_DATAx registers with a data width of 52 bits.
- Write the ECC pattern to
SELFTEST_DIAG_ECC.
- Execute ECCSELFTEST
instruction.
- Check for errors. If errors are
found, take corrective action:
- SELFTEST_DIAG_STATUS.DIAG_FAIL_CHECK_TYPE can be read to determine the
sequence that was failed (Positive check, Correctable error check, or
Uncorrectable error check).
- SELFTEST_DIAG_STATUS.
DIAG_FAIL_BIT_INDEX can be read to determine the data bit that was
failed with error injection.
- Clear the self-test status by
writing to SELFTEST_DIAG_STATUS_CLR.
Refer to
the following programming sequence to inject error in the vector ECC
checker:
- Enable the memory ECC diagnostics by writing to the MEM_ECC_DIAG.MEM_SIC_DIAG_EN
register. The user can now intentionally inject an error by altering a vector
address without altering the corresponding ECC and check error reporting
logic.
- For generating a single-bit error
(Correctable Interrupt Vector Error):
- Write to the Interrupt
Vector Address Register (INT_VECT_ADDR_y) or Interrupt Link Ownership
Config Register (INT_LINK_ OWNER_y) so that only one bit is different
from the existing configuration.
- Read the written
configuration.
- For generating a double-bit error (Uncorrectable Interrupt Vector Error):
- Write to the Interrupt Vector Address Register (INT_VECT_ADDR_y) or
Interrupt Link Ownership Config Register (INT_LINK_OWNER_y) so that two
or more bits are different from the existing configuration.
- Read the written configuration.
- The error gets notified to the ESM through Error Aggregator accordingly. In
addition, the ESM can be configured by the user to generate an interrupt for a
correctable error and NMI for an uncorrectable error.
Refer to the following programming sequence to inject error in the MMR parity
checker:
- Write to the REG_PARITY_DIAG_DATA.DIAG_DATA register with the desired data
pattern and/or Write to the REG_PARITY_DIAG_PARITY.DIAG_PARITY_DATA register
with the corresponding parity data bits. The user can now intentionally inject
parity error and check error reporting logic.
- Write to the REG_PARITY_DIAG_ASSERT.DIAG_ASSERT to assert parity
diagnostics.
- The error gets notified to the ESM through Error Aggregator accordingly. In
addition, the ESM can be configured by the user to generate an interrupt for the
Register Parity Diagnostic Error and NMI for the Register Parity Error.
Refer to PIPE Self-Test registers for
additional details.