| Overview |
| ======== |
| |
| The overall usage pattern for ECC diagnostic commands is the following: |
| |
| * (injecting errors is initially disabled) |
| |
| * define inject mask (which tells the DDR controller what type of errors |
| we'll be injecting: single/multiple bit etc.) |
| |
| * enable injecting errors - from now on the controller injects errors as |
| indicated in the inject mask |
| |
| IMPORTANT NOTICE: enabling injecting multiple-bit errors is potentially |
| dangerous as such errors are NOT corrected by the controller. Therefore caution |
| should be taken when enabling the injection of multiple-bit errors: it is only |
| safe when used on a carefully selected memory area and used under control of |
| the 'ecc testdw' 'ecc testword' command (see example 'Injecting Multiple-Bit |
| Errors' below). In particular, when you simply set the multiple-bit errors in |
| inject mask and enable injection, U-Boot is very likely to hang quickly as the |
| errors will be injected when it accesses its code, data etc. |
| |
| |
| Use cases for DDR 'ecc' command: |
| ================================ |
| |
| Before executing particular tests reset target board or clear status registers: |
| |
| => ecc captureclear |
| => ecc errdetectclr all |
| => ecc sbecnt 0 |
| |
| |
| Injecting Single-Bit Errors |
| --------------------------- |
| |
| 1. Set 1 bit in Data Path Error Inject Mask |
| |
| => ecc injectdatahi 1 |
| |
| 2. Run test over some memory region |
| |
| => ecc testdw 200000 10 |
| |
| 3. Check ECC status |
| |
| => ecc status |
| ... |
| Memory Data Path Error Injection Mask High/Low: 00000001 00000000 |
| ... |
| Memory Single-Bit Error Management (0..255): |
| Single-Bit Error Threshold: 255 |
| Single Bit Error Counter: 16 |
| ... |
| Memory Error Detect: |
| Multiple Memory Errors: 0 |
| Multiple-Bit Error: 0 |
| Single-Bit Error: 0 |
| ... |
| |
| 16 errors were generated, Single-Bit Error flag was not set as Single Bit Error |
| Counter did not reach Single-Bit Error Threshold. |
| |
| 4. Make sure used memory region got re-initialized with 0x0123456789abcdef |
| |
| => md 200000 |
| 00200000: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200010: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200020: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200030: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200040: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200050: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200060: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200070: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200080: deadbeef deadbeef deadbeef deadbeef ................ |
| 00200090: deadbeef deadbeef deadbeef deadbeef ................ |
| |
| Injecting Multiple-Bit Errors |
| ----------------------------- |
| |
| 1. Set more than 1 bit in Data Path Error Inject Mask |
| |
| => ecc injectdatahi 1 |
| => ecc injectdatalo 1 |
| |
| 2. Run test over some memory region |
| |
| => ecc testword 200000 1 |
| |
| 3. Check ECC status |
| |
| => ecc status |
| ... |
| Memory Data Path Error Injection Mask High/Low: 00000001 00000001 |
| ... |
| Memory Error Detect: |
| Multiple Memory Errors: 0 |
| Multiple-Bit Error: 1 |
| Single-Bit Error: 0 |
| ... |
| |
| The Multiple Memory Errors flags not set and Multiple-Bit Error flags are set. |
| |
| 4. Make sure used memory region got re-initialized with 0x0123456789abcdef |
| |
| => md 200000 |
| 00200000: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200010: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200020: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200030: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200040: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200050: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200060: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200070: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... |
| 00200080: deadbeef deadbeef deadbeef deadbeef ................ |
| 00200090: deadbeef deadbeef deadbeef deadbeef ................ |
| |
| |
| Test Single-Bit Error Counter and Threshold |
| ------------------------------------------- |
| |
| 1. Set 1 bit in Data Path Error Inject Mask |
| |
| => ecc injectdatahi 1 |
| |
| 2. Enable error injection |
| |
| => ecc inject en |
| |
| 3. Let u-boot run for a with Single-Bit error injection enabled |
| |
| 4. Disable error injection |
| |
| => ecc inject dis |
| |
| 4. Check status |
| |
| => ecc status |
| |
| ... |
| Memory Single-Bit Error Management (0..255): |
| Single-Bit Error Threshold: 255 |
| Single Bit Error Counter: 199 |
| |
| Memory Error Detect: |
| Multiple Memory Errors: 1 |
| Multiple-Bit Error: 0 |
| Single-Bit Error: 1 |
| ... |
| |
| Observe that Single-Bit Error is 'on' which means that Single-Bit Error Counter |
| reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that |
| is Counter reached Threshold more than one time (it wraps back after reaching |
| Threshold). |