Blame view
doc/README.mpc83xx.ddrecc
4.55 KB
d41ce506b Initial Release, ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
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). |