summaryrefslogtreecommitdiff
path: root/doc/README.mpc8349emds.ddrecc
blob: d8edada5654c13c9abc39ac3a8faaf32a65f2893 (plain)
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
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 test 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 0xcafecafe pattern

=> md 200000
00200000: cafecafe cafecafe cafecafe cafecafe    ................
00200010: cafecafe cafecafe cafecafe cafecafe    ................
00200020: cafecafe cafecafe cafecafe cafecafe    ................
00200030: cafecafe cafecafe cafecafe cafecafe    ................
00200040: cafecafe cafecafe cafecafe cafecafe    ................
00200050: cafecafe cafecafe cafecafe cafecafe    ................
00200060: cafecafe cafecafe cafecafe cafecafe    ................
00200070: cafecafe cafecafe cafecafe cafecafe    ................
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 5

2. Run test over some memory region

=> ecc test 200000 10

3. Check ECC status

=> ecc status
...
Memory Data Path Error Injection Mask High/Low: 00000005 00000000
...
Memory Error Detect:
  Multiple Memory Errors: 1
  Multiple-Bit Error: 1
  Single-Bit Error: 0
...

Observe that both Multiple Memory Errors and Multiple-Bit Error flags are set.

4. Make sure used memory region got re-initialized with 0xcafecafe pattern

=> md 200000
00200000: cafecafe cafecafe cafecafe cafecafe    ................
00200010: cafecafe cafecafe cafecafe cafecafe    ................
00200020: cafecafe cafecafe cafecafe cafecafe    ................
00200030: cafecafe cafecafe cafecafe cafecafe    ................
00200040: cafecafe cafecafe cafecafe cafecafe    ................
00200050: cafecafe cafecafe cafecafe cafecafe    ................
00200060: cafecafe cafecafe cafecafe cafecafe    ................
00200070: cafecafe cafecafe cafecafe cafecafe    ................
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: 60

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).