1Overview 2======== 3 4The overall usage pattern for ECC diagnostic commands is the following: 5 6 * (injecting errors is initially disabled) 7 8 * define inject mask (which tells the DDR controller what type of errors 9 we'll be injecting: single/multiple bit etc.) 10 11 * enable injecting errors - from now on the controller injects errors as 12 indicated in the inject mask 13 14IMPORTANT NOTICE: enabling injecting multiple-bit errors is potentially 15dangerous as such errors are NOT corrected by the controller. Therefore caution 16should be taken when enabling the injection of multiple-bit errors: it is only 17safe when used on a carefully selected memory area and used under control of 18the 'ecc testdw' 'ecc testword' command (see example 'Injecting Multiple-Bit 19Errors' below). In particular, when you simply set the multiple-bit errors in 20inject mask and enable injection, U-Boot is very likely to hang quickly as the 21errors will be injected when it accesses its code, data etc. 22 23 24Use cases for DDR 'ecc' command: 25================================ 26 27Before executing particular tests reset target board or clear status registers: 28 29=> ecc captureclear 30=> ecc errdetectclr all 31=> ecc sbecnt 0 32 33 34Injecting Single-Bit Errors 35--------------------------- 36 371. Set 1 bit in Data Path Error Inject Mask 38 39=> ecc injectdatahi 1 40 412. Run test over some memory region 42 43=> ecc testdw 200000 10 44 453. Check ECC status 46 47=> ecc status 48... 49Memory Data Path Error Injection Mask High/Low: 00000001 00000000 50... 51Memory Single-Bit Error Management (0..255): 52 Single-Bit Error Threshold: 255 53 Single Bit Error Counter: 16 54... 55Memory Error Detect: 56 Multiple Memory Errors: 0 57 Multiple-Bit Error: 0 58 Single-Bit Error: 0 59... 60 6116 errors were generated, Single-Bit Error flag was not set as Single Bit Error 62Counter did not reach Single-Bit Error Threshold. 63 644. Make sure used memory region got re-initialized with 0x0123456789abcdef 65 66=> md 200000 6700200000: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 6800200010: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 6900200020: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 7000200030: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 7100200040: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 7200200050: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 7300200060: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 7400200070: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 7500200080: deadbeef deadbeef deadbeef deadbeef ................ 7600200090: deadbeef deadbeef deadbeef deadbeef ................ 77 78Injecting Multiple-Bit Errors 79----------------------------- 80 811. Set more than 1 bit in Data Path Error Inject Mask 82 83=> ecc injectdatahi 1 84=> ecc injectdatalo 1 85 862. Run test over some memory region 87 88=> ecc testword 200000 1 89 903. Check ECC status 91 92=> ecc status 93... 94Memory Data Path Error Injection Mask High/Low: 00000001 00000001 95... 96Memory Error Detect: 97 Multiple Memory Errors: 0 98 Multiple-Bit Error: 1 99 Single-Bit Error: 0 100... 101 102The Multiple Memory Errors flags not set and Multiple-Bit Error flags are set. 103 1044. Make sure used memory region got re-initialized with 0x0123456789abcdef 105 106=> md 200000 10700200000: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 10800200010: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 10900200020: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 11000200030: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 11100200040: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 11200200050: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 11300200060: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 11400200070: 01234567 89abcdef 01234567 89abcdef .#Eg.....#Eg.... 11500200080: deadbeef deadbeef deadbeef deadbeef ................ 11600200090: deadbeef deadbeef deadbeef deadbeef ................ 117 118 119Test Single-Bit Error Counter and Threshold 120------------------------------------------- 121 1221. Set 1 bit in Data Path Error Inject Mask 123 124=> ecc injectdatahi 1 125 1262. Enable error injection 127 128=> ecc inject en 129 1303. Let u-boot run for a with Single-Bit error injection enabled 131 1324. Disable error injection 133 134=> ecc inject dis 135 1364. Check status 137 138=> ecc status 139 140... 141Memory Single-Bit Error Management (0..255): 142 Single-Bit Error Threshold: 255 143 Single Bit Error Counter: 199 144 145Memory Error Detect: 146 Multiple Memory Errors: 1 147 Multiple-Bit Error: 0 148 Single-Bit Error: 1 149... 150 151Observe that Single-Bit Error is 'on' which means that Single-Bit Error Counter 152reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that 153is Counter reached Threshold more than one time (it wraps back after reaching 154Threshold). 155