xref: /OK3568_Linux_fs/u-boot/doc/README.mpc83xx.ddrecc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunOverview
2*4882a593Smuzhiyun========
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunThe overall usage pattern for ECC diagnostic commands is the following:
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun  * (injecting errors is initially disabled)
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun  * define inject mask (which tells the DDR controller what type of errors
9*4882a593Smuzhiyun    we'll be injecting: single/multiple bit etc.)
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun  * enable injecting errors - from now on the controller injects errors as
12*4882a593Smuzhiyun    indicated in the inject mask
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunIMPORTANT NOTICE: enabling injecting multiple-bit errors is potentially
15*4882a593Smuzhiyundangerous as such errors are NOT corrected by the controller. Therefore caution
16*4882a593Smuzhiyunshould be taken when enabling the injection of multiple-bit errors: it is only
17*4882a593Smuzhiyunsafe when used on a carefully selected memory area and used under control of
18*4882a593Smuzhiyunthe 'ecc testdw' 'ecc testword' command (see example 'Injecting Multiple-Bit
19*4882a593SmuzhiyunErrors' below). In particular, when you simply set the multiple-bit errors in
20*4882a593Smuzhiyuninject mask and enable injection, U-Boot is very likely to hang quickly as the
21*4882a593Smuzhiyunerrors will be injected when it accesses its code, data etc.
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun
24*4882a593SmuzhiyunUse cases for DDR 'ecc' command:
25*4882a593Smuzhiyun================================
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunBefore executing particular tests reset target board or clear status registers:
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun=> ecc captureclear
30*4882a593Smuzhiyun=> ecc errdetectclr all
31*4882a593Smuzhiyun=> ecc sbecnt 0
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunInjecting Single-Bit Errors
35*4882a593Smuzhiyun---------------------------
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun1. Set 1 bit in Data Path Error Inject Mask
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun=> ecc injectdatahi 1
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun2. Run test over some memory region
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun=> ecc testdw 200000 10
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun3. Check ECC status
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun=> ecc status
48*4882a593Smuzhiyun...
49*4882a593SmuzhiyunMemory Data Path Error Injection Mask High/Low: 00000001 00000000
50*4882a593Smuzhiyun...
51*4882a593SmuzhiyunMemory Single-Bit Error Management (0..255):
52*4882a593Smuzhiyun  Single-Bit Error Threshold: 255
53*4882a593Smuzhiyun  Single Bit Error Counter: 16
54*4882a593Smuzhiyun...
55*4882a593SmuzhiyunMemory Error Detect:
56*4882a593Smuzhiyun  Multiple Memory Errors: 0
57*4882a593Smuzhiyun  Multiple-Bit Error: 0
58*4882a593Smuzhiyun  Single-Bit Error: 0
59*4882a593Smuzhiyun...
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun16 errors were generated, Single-Bit Error flag was not set as Single Bit Error
62*4882a593SmuzhiyunCounter did not reach  Single-Bit Error Threshold.
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun4. Make sure used memory region got re-initialized with 0x0123456789abcdef
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun=> md 200000
67*4882a593Smuzhiyun00200000: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
68*4882a593Smuzhiyun00200010: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
69*4882a593Smuzhiyun00200020: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
70*4882a593Smuzhiyun00200030: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
71*4882a593Smuzhiyun00200040: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
72*4882a593Smuzhiyun00200050: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
73*4882a593Smuzhiyun00200060: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
74*4882a593Smuzhiyun00200070: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
75*4882a593Smuzhiyun00200080: deadbeef deadbeef deadbeef deadbeef    ................
76*4882a593Smuzhiyun00200090: deadbeef deadbeef deadbeef deadbeef    ................
77*4882a593Smuzhiyun
78*4882a593SmuzhiyunInjecting Multiple-Bit Errors
79*4882a593Smuzhiyun-----------------------------
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun1. Set more than 1 bit in Data Path Error Inject Mask
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun=> ecc injectdatahi 1
84*4882a593Smuzhiyun=> ecc injectdatalo 1
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun2. Run test over some memory region
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun=> ecc testword 200000 1
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun3. Check ECC status
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun=> ecc status
93*4882a593Smuzhiyun...
94*4882a593SmuzhiyunMemory Data Path Error Injection Mask High/Low: 00000001 00000001
95*4882a593Smuzhiyun...
96*4882a593SmuzhiyunMemory Error Detect:
97*4882a593Smuzhiyun  Multiple Memory Errors: 0
98*4882a593Smuzhiyun  Multiple-Bit Error: 1
99*4882a593Smuzhiyun  Single-Bit Error: 0
100*4882a593Smuzhiyun...
101*4882a593Smuzhiyun
102*4882a593SmuzhiyunThe Multiple Memory Errors flags not set and Multiple-Bit Error flags are set.
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun4. Make sure used memory region got re-initialized with 0x0123456789abcdef
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun=> md 200000
107*4882a593Smuzhiyun00200000: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
108*4882a593Smuzhiyun00200010: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
109*4882a593Smuzhiyun00200020: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
110*4882a593Smuzhiyun00200030: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
111*4882a593Smuzhiyun00200040: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
112*4882a593Smuzhiyun00200050: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
113*4882a593Smuzhiyun00200060: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
114*4882a593Smuzhiyun00200070: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
115*4882a593Smuzhiyun00200080: deadbeef deadbeef deadbeef deadbeef    ................
116*4882a593Smuzhiyun00200090: deadbeef deadbeef deadbeef deadbeef    ................
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun
119*4882a593SmuzhiyunTest Single-Bit Error Counter and Threshold
120*4882a593Smuzhiyun-------------------------------------------
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun1. Set 1 bit in Data Path Error Inject Mask
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun=> ecc injectdatahi 1
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun2. Enable error injection
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun=> ecc inject en
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun3. Let u-boot run for a with Single-Bit error injection enabled
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun4. Disable error injection
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun=> ecc inject dis
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun4. Check status
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun=> ecc status
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun...
141*4882a593SmuzhiyunMemory Single-Bit Error Management (0..255):
142*4882a593Smuzhiyun  Single-Bit Error Threshold: 255
143*4882a593Smuzhiyun  Single Bit Error Counter: 199
144*4882a593Smuzhiyun
145*4882a593SmuzhiyunMemory Error Detect:
146*4882a593Smuzhiyun  Multiple Memory Errors: 1
147*4882a593Smuzhiyun  Multiple-Bit Error: 0
148*4882a593Smuzhiyun  Single-Bit Error: 1
149*4882a593Smuzhiyun...
150*4882a593Smuzhiyun
151*4882a593SmuzhiyunObserve that Single-Bit Error is 'on' which means that Single-Bit Error Counter
152*4882a593Smuzhiyunreached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that
153*4882a593Smuzhiyunis Counter reached Threshold more than one time (it wraps back after reaching
154*4882a593SmuzhiyunThreshold).
155